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

如何实现仅接受含undefined类型参数的isUndefined类型守卫函数

实现带参数类型限制的isUndefined类型守卫函数

需要实现一个类型守卫函数isUndefined,满足以下核心要求:

  • 仅接受**类型包含undefined**的参数,不满足时触发编译错误
  • 调用后能将参数的类型断言为undefined

基础实现的不足

下面是一个基础的类型守卫实现,但它允许传入任意类型(因为参数为unknown),无法满足编译时的参数类型限制:

function isUndefined(value: unknown): value is undefined {
  return typeof value === 'undefined';
}

正确实现方案

通过泛型约束可以实现参数类型的编译时校验,同时保留类型断言能力:

function isUndefined<T>(value: T extends undefined ? T : T | undefined): value is Extract<T, undefined> {
  return typeof value === 'undefined';
}

或者更简洁的泛型约束写法,效果完全一致:

function isUndefined<T extends undefined | unknown>(value: T): value is Extract<T, undefined> {
  return typeof value === 'undefined';
}

验证期望行为

// ❌ 编译错误:参数类型boolean不包含undefined
isUndefined(true)

// ✅ 无编译错误:参数类型为boolean | undefined,包含undefined
const arg = true as boolean | undefined
isUndefined(arg)
// 调用后,IDE中悬停arg会显示类型为undefined
arg // arg: undefined

实现原理

  • 泛型T的约束确保传入的参数类型要么是undefined,要么是包含undefined的联合类型,不符合的参数会触发编译报错
  • Extract<T, undefined>工具类型从联合类型T中提取出undefined分支,实现精准的类型断言
  • 运行时逻辑保持简单可靠,通过typeof操作符判断值是否为undefined

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:02:41