TypeScript 词条目录
前端Wiki/词条/类型谓词

类型谓词

定义返回 x is T 的函数签名,让调用处的类型自动收窄

类型谓词写成 (x): x is Cat,函数返回布尔的同时告诉编译器:返回真值时参数就是 Cat。它常封装自定义的判断逻辑,比如 isApiError(err) 配合 if 使用后,分支内 err 自动收窄为错误类型,访问 code 等专属属性无需断言,是替代 instanceof 的灵活手段。

与普通布尔返回不同,谓词让控制流分析跨函数生效,数组 filter 也支持:list.filter(isCat) 直接得到 Cat[]。从 TS 5.5 起还能从函数体自动推断谓词,多数场景无需手写。注意谓词声明与实现必须诚实,错误的谓词会让编译器推导出错误类型,带来更隐蔽的运行时 bug。

JavaScript
class Cat { meow(): void {} }
class Dog { bark(): void {} }

function isCat(a: Cat | Dog): a is Cat {
  return a instanceof Cat;
}

const pet = new Cat();
if (isCat(pet)) pet.meow();          // 已收窄为 Cat

const list: (Cat | Dog)[] = [new Cat(), new Dog()];
const cats = list.filter(isCat);     // 类型是 Cat[]
⚠ 常见误区
🔗 相关词条类型守卫与类型缩小泛型基础
← 返回来源章节类型守卫与类型缩小