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

如何定义键为常量、值为同类型对象的TypeScript类型?

问题

我有一个键为常量的对象:

const KEYS = {
  KEY1: 'hello',
  KEY2: 'world'
} as const;

现在需要把这个对象的值替换为同类型的对象,希望用一行代码定义对应的TypeScript类型,明确每个键对应的值类型。尝试过{const: string}这类写法但出现TS2353错误,由于有近200个键,不想逐个定义键的类型,想知道正确实现方式。

解决方案

可以利用TypeScript的映射类型或内置的Record工具类型来实现,自动基于KEYS的键生成目标类型:

方式1:使用Record工具类型(简洁写法)

// 替换{ value: string }为你实际需要的值类型
type KeyValueMap = Record<keyof typeof KEYS, { value: string }>;

方式2:使用映射类型(更灵活,支持自定义逻辑)

// 同样替换{ value: string }为目标值类型
type KeyValueMap = {
  [K in keyof typeof KEYS]: { value: string };
};

说明

  • keyof typeof KEYS会提取KEYS对象所有键的字面量类型(比如示例中的"KEY1" | "KEY2"),自动覆盖你所有200个键。
  • 把示例中的{ value: string }替换为你实际需要的值类型即可,比如如果值是单纯的字符串,就写string。

这样定义后,KeyValueMap类型会包含KEYS的所有键,每个键对应的值类型都是你指定的类型,无需逐个手动定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:15:56