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

TypeScript如何实现无返回值的type guard类型守卫能力

TypeScript 无返回值校验函数实现类型守卫的方法

你需要使用 TypeScript 3.7 版本后支持的 断言签名(Assertion Signature) 语法,该语法就是专门为抛出错误的校验场景设计的,只要函数正常返回没有抛出异常,TS 就会自动按你定义的规则收缩参数类型。

修正后的代码实现

// 泛型 + asserts 签名实现无返回值类型守卫
const isNotNull = <T>(obj: T): asserts obj is NonNullable<T> => {
  // 修正原代码的变量名错误、未定义isNull变量的问题
  if (obj === null || obj === undefined) {
    throw new Error('object is null or undefined');
  }
}

// 模拟获取对象的方法
const getObject = (): null | object => {
  return { info: '测试数据' };
}

const obj: null | object = getObject();
isNotNull(obj);
// 此处TS已经自动推断obj为object类型,不会再提示可能为null的错误
console.log(obj.toString());

语法说明

  • asserts obj is NonNullable<T> 就是断言签名,作用是告诉TS编译器:如果这个函数执行完没有抛出错误,那么传入的obj参数一定符合NonNullable<T>的类型(即排除了null和undefined的类型)
  • 除了判空场景,你也可以自定义其他校验规则的断言函数,比如校验参数是否为字符串:
const assertIsString = (val: unknown): asserts val is string => {
  if (typeof val !== 'string') throw new Error('value is not string');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:02