export type DomainType = string; export type LocaleType = string; export type TranslationsType = Record; export type NoParametersType = Record; export type ParametersType = Record | NoParametersType; export type RemoveIntlIcuSuffix = T extends `${infer U}+intl-icu` ? U : T; export type DomainsOf = M extends Message ? keyof Translations : never; export type LocaleOf = M extends Message ? Locale : never; export type ParametersOf = M extends Message ? Translations[D] extends { parameters: infer Parameters; } ? Parameters : never : never; export interface Message { id: string; translations: { [domain in DomainType]: { [locale in Locale]: string; }; }; } export declare function setLocale(locale: LocaleType | null): void; export declare function getLocale(): LocaleType; export declare function throwWhenNotFound(enabled: boolean): void; export declare function setLocaleFallbacks(localeFallbacks: Record): void; export declare function getLocaleFallbacks(): Record; export declare function trans, D extends DomainsOf, P extends ParametersOf>(...args: P extends NoParametersType ? [message: M, parameters?: P, domain?: RemoveIntlIcuSuffix, locale?: LocaleOf] : [message: M, parameters: P, domain?: RemoveIntlIcuSuffix, locale?: LocaleOf]): string;