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

TypeScript如何从const字符串数组生成类型键,动态定义FiatExchangeRates类型

实现方案

你可以直接利用TypeScript的索引访问类型搭配内置Record工具类型或者手写映射类型实现,核心逻辑如下:

  • 你定义的currencies已经加了as const断言,TypeScript会将它推导为只读的字面量数组类型,而非宽泛的string[]
  • 通过typeof currencies[number]可以拿到数组所有元素组成的字面量联合类型:'eur' | 'usd' | 'gbp' | 'chf'
  • 把这个联合类型作为对象的键的类型,值设定为number即可

完整可运行代码示例:

const currencies = ['eur', 'usd', 'gbp', 'chf'] as const;

// 写法1:用内置Record工具类型,更简洁
type FiatExchangeRates = Record<typeof currencies[number], number>;

// 写法2:手写映射类型,扩展性更高(需要加可选、只读修饰符直接调整即可)
// type FiatExchangeRates = {
//   [key in typeof currencies[number]]: number
// }

const fiatExchangeRates: FiatExchangeRates = {
  eur: 1.11,
  usd: 1.12,
  gbp: 1.13,
  chf: 1.14,
};

const a = fiatExchangeRates.eur; // 类型会自动推导为number

后续你需要新增货币类型时,只需要修改currencies数组的内容,FiatExchangeRates会自动同步更新类型,少写对应键、键名拼写错误都会触发TypeScript类型报错。如果允许部分货币汇率可选,可以给映射类型加可选修饰符:

type OptionalFiatExchangeRates = {
  [key in typeof currencies[number]]?: number
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:54:02