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

TypeScript映射类型是否可识别null/undefined?该行为是否有文档记录?

TypeScript映射类型处理null/undefined/unknown/never的行为说明

这个行为是TypeScript官方明确规定的,并非未文档化的编译器技巧,具体规则分情况说明如下:

1. null与undefined的映射结果

当映射类型的输入是null或undefined时,TypeScript会直接返回原类型。这是因为null和undefined属于非对象类型,映射类型本质是针对对象类型的属性遍历操作,对于这类非对象的特殊原始类型,编译器会直接返回输入类型本身。

代码验证:

type MappedType<T> = {[P in keyof T]: T[P]}
type MappedNull = MappedType<null>           // null
type MappedUndefined = MappedType<undefined> // undefined

2. unknown的映射结果

unknown的映射结果为{},原因是keyof unknown的结果是never,而映射类型遍历空键集合(即never)时,会生成没有任何属性的空对象类型{},这是映射类型的基础规则。

代码验证:

type MappedUnknown = MappedType<unknown>     // {}

3. never的映射结果

never作为映射类型输入时直接返回never。这是因为never表示不存在的类型,任何涉及never的类型操作都会直接返回never,符合该类型的收缩规则。

代码验证:

type MappedNever = MappedType<never>         // never

补充keyof相关背景规则

  • keyof null、keyof undefined、keyof unknown均返回never,因为这些类型本身没有可遍历的属性;
  • keyof never返回string | number | symbol,是因为never是所有类型的子类型,从类型理论上会被推断为所有可能键类型的联合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:57:08