+
+// generate types for i18n keys
+const baseLanguage = "en";
+
+fs.readFile(`${translationDir}${baseLanguage}.json`, "utf8", (_, fileStr) => {
+ const keys = Object.keys(JSON.parse(fileStr));
+
+ const data = `import * as i18n from "i18next";
+
+type I18nKeys =
+${keys.map(key => ` | "${key}"`).join("\n")};
+
+declare module "i18next" {
+ export interface TFunction {
+ // basic usage
+ <
+ TResult extends TFunctionResult = string,
+ TInterpolationMap extends object = StringMap
+ >(
+ key: I18nKeys | I18nKeys[],
+ options?: TOptions<TInterpolationMap> | string
+ ): TResult;
+ // overloaded usage
+ <
+ TResult extends TFunctionResult = string,
+ TInterpolationMap extends object = StringMap
+ >(
+ key: I18nKeys | I18nKeys[],
+ defaultValue?: string,
+ options?: TOptions<TInterpolationMap> | string
+ ): TResult;
+ }
+}
+`;
+
+ fs.writeFileSync(`${outDir}i18next.d.ts`, data);
+});