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

TypeScript中如何以另一类型的属性值为键动态生成新类型

实现方法

直接用TypeScript的映射类型,基于现有类型的属性值动态生成目标类型即可,完全满足自动同步的要求:

type NewType = {
  [K in NavigatorNamesType[keyof NavigatorNamesType]]: undefined
}

实现原理

  • NavigatorNamesType[keyof NavigatorNamesType]是索引访问类型,会取出NavigatorNamesType所有属性值组成的联合类型,在当前定义下等价于'HomeNavigation' | 'AuthNavigation'
  • [K in 联合类型]是映射类型的语法,会遍历联合类型的每一个成员作为新类型的键,所有键对应的类型固定设置为undefined
  • 后续只要给NavigatorNamesType新增键值对,NewType会自动同步生成对应的结构,不需要手动修改。

更稳妥的优化写法

如果不想手动维护NavigatorNamesType的类型声明,避免出现对象实际值和类型定义不一致的问题,可以直接用as const修饰常量对象,从对象值反向推导类型,后续只需要修改对象本身,两个类型都会自动更新:

const navigatorNames = {
    homeNavigation: 'HomeNavigation',
    authNavigation: 'AuthNavigation'
} as const

// 从常量自动推导导航名类型,不需要手动写类型声明
type NavigatorNamesType = typeof navigatorNames
// 同样自动生成目标类型
type NewType = {
  [K in NavigatorNamesType[keyof NavigatorNamesType]]: undefined
}

你可以自行验证:给navigatorNames新增比如profileNavigation: 'ProfileNavigation'的键值对,NewType会自动追加ProfileNavigation: undefined的属性,完全符合要求。

内容的提问来源于stack exchange,提问作者Abhishek Bisht

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:54:26