import type { i18n as I18nType, Namespace as I18nNamespace, SelectorOptions as I18nSelectorOptions, TFunction as I18nTFunction, TOptions as I18nTOptions } from 'i18next';
import type { i18nextResources } from './i18next';
export type i18n = I18nType;
export type Namespace = I18nNamespace;
export type SelectorOptions<Ns extends Namespace> = I18nSelectorOptions<Ns>;
export type TFunction<Ns extends Namespace, KPrefix = undefined> = I18nTFunction<Ns, KPrefix>;
export type TOptions<M extends object> = I18nTOptions<M>;
export type Translations = Record<NsTranslationKey<'common'>, string>;
/**
 * @deprecated as an alternative, please use `NsTranslatable`
 */
export type Translatable = NsTranslationKey<'common'> | NsTranslationObject<'common'>;
export type NamespaceToKeyMap = {
    [K in keyof i18nextResources]: keyof i18nextResources[K];
};
export type NsTranslationKey<NS extends Namespace> = NS extends keyof NamespaceToKeyMap ? NamespaceToKeyMap[NS] : never;
export type NsTranslationObject<NS extends Namespace> = {
    key: NsTranslationKey<NS>;
    values: Omit<SelectorOptions<NS>, 'ns'> & Record<string, string | undefined>;
};
export type NsTranslatable<NS extends Namespace> = NsTranslationKey<NS> | NsTranslationObject<NS>;
