如何在TypeScript中实现多语言字典对象的动态同步?
TypeScript实现多语言字典键同步方案
要实现俄语(ru)和英语(en)字典的键完全同步,避免出现一方有键另一方缺失的情况,可以用以下两种方案解决:
方案1:显式维护共享键类型
先定义所有语言字典的共享键类型,再让两个字典严格遵循这个类型:
// 定义所有共享的语言键集合 type LanguageKeys = 'page.main.hello' | 'page.main.bye'; // 语言字典必须包含所有共享键 type LanguageDict = { [Key in LanguageKeys]: string; }; // 两个字典都需实现LanguageDict,缺失键则报错 const ru: LanguageDict = { 'page.main.hello': 'Привет!', 'page.main.bye': 'До свидания!' }; const en: LanguageDict = { 'page.main.hello': 'Hi!', 'page.main.bye': 'Bye!' };
新增键时,必须先更新LanguageKeys,再给两个字典添加对应键,否则TypeScript会直接提示错误。
方案2:用泛型函数隐式约束键一致性
通过泛型函数强制两个字典的键完全匹配,无需显式定义键类型:
// 泛型函数约束两个字典的键完全一致 function createLanguagePairs<T extends Record<string, string>>(ru: T, en: T) { return { ru, en }; } // 创建同步的语言字典对 const { ru, en } = createLanguagePairs( { 'page.main.hello': 'Привет!' }, { 'page.main.hello': 'Hi!' } ); // 若其中一个字典新增键而另一个未同步,会触发类型错误 // 例如下方代码会报错:en缺少'page.main.bye'键 const { ru: ru2, en: en2 } = createLanguagePairs( { 'page.main.hello': 'Привет!', 'page.main.bye': 'До свидания!' }, { 'page.main.hello': 'Hi!' } );
这种方式更灵活,新增键时只需同步修改两个字典即可,函数会自动校验键的一致性。
内容的提问来源于stack exchange,提问作者Александр Невский
相关产品推荐
相关产品推荐

