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

如何使用键数组快速定义所有键为同类型的TypeScript类型

完全可以,TypeScript 提供了内置的映射类型语法可以实现这个需求,不需要手动逐个声明属性。

实现方式

1. 直接用键字面量联合生成类型

如果已经明确所有键名,可以直接用内置的Record工具类型实现:

// 先定义所有允许的键名的联合类型
type ParamKeys = 'gdp' | 'interest' | 'inflation'
// 生成所有值为number的对象类型,和你手动逐个写的效果完全一致
type Params = Record<ParamKeys, number>

2. 从已有的键名数组推导类型

如果你已经提前写好了键名的数组常量,可以直接从数组推导类型,不需要重复写联合类型:

// 数组后加 as const 让 TypeScript 保留精确的字面量类型,而不是推断为宽泛的 string[]
const PARAM_KEYS = ['gdp', 'interest', 'inflation'] as const

// 从数组提取所有键的联合类型
type ParamKey = typeof PARAM_KEYS[number]

// 生成最终的参数类型
type Params = Record<ParamKey, number>

补充说明

以上两种方式生成的Params类型,和你手动编写的{gdp: number, interest: number, inflation: number}完全等价。后续新增参数键只需要更新联合类型或者键名数组即可,不需要逐个修改类型定义。

  • 从数组推导时不能省略as const,否则 TypeScript 会把数组推断为string[]类型,最终生成的参数类型会变成无键名限制的Record<string, number>,失去类型校验作用。
  • 如果需要在同一类型里加其他不同类型的属性,可以用交叉类型扩展:
type Params = Record<ParamKey, number> & {
  remark: string
  enableLog: boolean
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:09:02