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

TypeScript两种Mapped Types写法是否存在差异?

两种TypeScript映射类型是否存在差异?

这两个映射类型在所有合法场景下都没有区别,核心原因是TypeScript的交叉类型不区分顺序:string & P 和 P & string 的运算结果完全等价。

具体分析

TypeScript中,交叉类型 A & B 和 B & A 是完全一致的,交换类型顺序不会改变最终的交叉结果。这里的P是keyof T的成员,而keyof T的类型只能是string | number | symbol:

  • 当P是字符串类型时,string & P和P & string都等于P本身,Capitalize可以正常将键名首字母大写;
  • 当P是数字或符号类型时,string & P和P & string都会得到never类型,映射类型会自动忽略never类型的键,不会生成对应的属性。

验证示例

以你提供的Person接口为例:

interface Person {
  name: string;
  age: number;
}

两种映射类型都会生成完全相同的结果:

type UppercasePerson = {
    Name: string;
    Age: number;
}

特殊场景测试

哪怕T包含数字或符号类型的键,比如:

type MixedType = {
  name: string;
  0: number;
  [Symbol('id')]: boolean;
}

使用两种映射类型处理后,都会只保留首字母大写的字符串键:

type UppercaseMixed = {
    Name: string;
}

数字键0和符号键都会被过滤,两种写法的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:03:11