如何定义键为常量、值为同类型对象的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
相关产品推荐
相关产品推荐

