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

如何在TypeScript中使用否定类型?两种写法报错求解决方案

在TypeScript中实现否定类型的正确方式

你之前的两种写法都不符合TypeScript的语法规范,问题出在:

  • 第一种写法里is not不是合法的类型谓词语法,TypeScript只支持obj is 具体类型的形式,没有not关键字。
  • 第二种写法把运行时的表达式当成了类型返回值,这完全不对,函数返回的类型必须是TypeScript的类型定义,不是代码表达式。

下面是两种可行的解决办法:

方法一:使用Exclude工具类型排除目标类型

Exclude<T, U>是TypeScript内置的工具类型,作用是从类型T中排除掉U类型。对于你的场景,就是排除undefined:

function notUndef(obj: any): obj is Exclude<typeof obj, undefined> {
    return obj !== void(0);
}

方法二:使用NonNullable工具类型

如果你的需求是排除null和undefined,NonNullable<T>可以直接返回去掉这两个类型后的结果。如果只需要排除undefined,这个写法也适用(它同时排除null,但不影响你的判断逻辑):

function notUndef(obj: any): obj is NonNullable<typeof obj> {
    return obj !== void(0);
}

额外提示

如果你的参数不是any,而是明确的联合类型(比如string | undefined),直接写具体的非否定类型会更清晰:

function notUndef(obj: string | undefined): obj is string {
    return obj !== void(0);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:50:25