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

Typescript 如何判断指定类型是否包含 undefined 类型

问题原因

你写的代码没有得到预期结果,是因为直接对具体联合类型使用extends时,不会触发分布式条件类型的分发逻辑,会把整个联合类型作为整体判断是否继承undefined,显然boolean | undefined整体不满足extends undefined的条件,所以得到的是no。

解决方案

你可以封装一个泛型工具类型实现需求,下面是两种常用的实现方式:

方式1:反向子类型判断(写法最简单)

直接判断undefined是否是目标类型的子类型,只要目标类型的联合分支里包含undefined,就会返回yes:

// 封装工具类型
type ContainsUndefined<T> = undefined extends T ? 'yes' : 'no';

// 测试
type a = boolean | undefined;
type v = ContainsUndefined<a>; // 结果为 'yes'
type b = string;
type v2 = ContainsUndefined<b>; // 结果为 'no'

方式2:分布式条件类型实现

适合需要同时处理联合类型每个分支的扩展场景:

type IsUndefined<T> = T extends undefined ? true : never;
type ContainsUndefined<T> = [IsUndefined<T>] extends [never] ? 'no' : 'yes';

// 测试
type a = boolean | undefined;
type v = ContainsUndefined<a>; // 结果为 'yes'

注意事项

  • 上述实现都是类型层面的静态判断,仅在编译阶段生效,不会生成任何运行时代码。如果需要在运行时判断变量值是否为undefined,直接使用typeof 变量 === 'undefined'即可。
  • 如果需要同时判断是否包含null,把工具类型中的undefined替换为undefined | null即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:48:05