如何在TypeScript中声明键名不同但类型相同的对象?
在TypeScript中简便声明含大量键的对象类型
你可以通过TypeScript内置的**Record工具类型或者映射类型**实现需求,不用逐个定义每个键,具体方案如下:
方案1:所有键对应同一值类型(最简便)
先定义包含所有键的联合类型,再用Record快速生成对象类型:
// 定义所有需要的键的联合类型 type ObjectKeys = 'name' | 'phone' | 'email' | 'address' | 'gender'; // 生成对象类型:所有键对应string类型 type ReturnValue = Record<ObjectKeys, string>;
Record<K, T>是TypeScript内置工具类型,作用是创建一个对象类型,其中所有键来自联合类型K,每个键的值类型都是T。
方案2:不同键对应不同值类型(更灵活)
如果需要部分键对应不同类型,可以结合Record和交叉类型,或者直接使用映射类型:
方式A:交叉多个Record
type StringKeys = 'name' | 'email' | 'address'; type NumericKeys = 'phone' | 'age'; // 合并两种键值类型 type ReturnValue = Record<StringKeys, string> & Record<NumericKeys, number>;
方式B:自定义映射类型
type ObjectKeys = 'name' | 'phone' | 'email' | 'age'; // 根据键的类型动态指定值类型 type ReturnValue = { [K in ObjectKeys]: K extends 'phone' | 'age' ? number : string; };
这种方式可以通过条件类型,为不同的键指定不同的值类型,适合复杂场景。
注意:你示例中的
['name'| 'phone' | ... ]: string写法不合法,TypeScript不支持直接在对象类型中用联合类型作为索引签名,必须通过映射类型或Record来实现。
内容的提问来源于stack exchange,提问作者Viweei
相关产品推荐
相关产品推荐

