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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:57:05