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

为何TypeScript映射类型Identity<number>返回原始类型而非对象?

为什么Identity<number>返回原始类型number而非对象类型?

当keyof作用于number这类原始类型时,它返回的是对应包装对象(比如Number)的所有公共属性、方法的键的联合类型——比如"toString"、"toFixed"、"valueOf"等。

但TypeScript有个内置的类型简化逻辑:当你定义的{ [P in keyof T]: T[P] }这种映射类型作用于原始类型T时,生成的对象类型会被自动折叠为原始类型T本身。这是因为JavaScript运行时中,原始值访问属性时会自动装箱为包装对象,TypeScript类型系统为了贴合这种实际行为,将该映射类型的结果与原始类型视为等价。

简单说,Identity<number>生成的类型本质上是number的包装对象类型,但TypeScript认为它和原始number类型完全兼容,所以会优先显示更简洁的原始类型。

官方文档说明

TypeScript官方手册的「映射类型」章节明确指出:同态映射类型(即依赖keyof T且不修改键的映射类型)作用于原始类型时,会保留原始类型的身份,而非生成包含包装对象所有属性的复杂对象类型。这类映射类型的结果会被自动简化为对应的原始类型,这是TypeScript类型系统为了对齐JavaScript运行时行为而设计的规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:52:14