You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中强制两个嵌套翻译对象拥有相同键结构?

实现翻译对象的自动结构约束

当然可以实现无需手动维护的类型约束,核心是利用TypeScript的typeof操作符提取已有翻译对象的结构,再配合递归工具类型统一约束叶子节点类型。

具体实现步骤:

  1. 定义递归工具类型
    这个类型会递归遍历目标对象的所有嵌套结构,确保所有叶子节点都是string类型,同时完全保留原对象的键结构:
type TranslationStructure<T> = {
  [K in keyof T]: T[K] extends object ? TranslationStructure<T[K]> : string;
};
  1. 约束新翻译对象的类型
    直接用typeof en提取已有翻译对象的结构,通过上面的工具类型处理后,作为新对象的类型注解:
// 已有英文翻译对象
const en = {
  MAIN_MENU: {
    TITLE: 'Welcome',
    SUBTITLE: 'Select an option'
  },
  SETTINGS: {
    LANGUAGE: 'Language'
  } as const; // 可选:添加as const让结构推断更严谨

// 约束西班牙语翻译对象的结构与en完全一致
const es: TranslationStructure<typeof en> = {
  MAIN_MENU: {
    TITLE: 'Bienvenido',
    SUBTITLE: 'Selecciona una opción'
  },
  SETTINGS: {
    LANGUAGE: 'Idioma'
  }
};

效果说明:

  • 当en的结构发生修改(比如新增/删除嵌套键),es的类型约束会自动同步更新,完全不需要手动修改接口。
  • TypeScript会严格检查es的键是否与en完全匹配,同时确保所有翻译值都是字符串类型,避免结构不匹配或类型错误。

内容的提问来源于stack exchange,提问作者Gabriel Furstenheim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 19:40:57