首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >TypeScript >TypeScript 中的类型守卫(Type Guard)是什么?如何使用?

TypeScript 中的类型守卫(Type Guard)是什么?如何使用?

词条归属:TypeScript

1. 类型守卫的概念

  • 类型守卫是运行时检查表达式,帮助 TypeScript 在条件分支内将宽泛类型收窄为更具体的类型
  • 它是 JavaScript 动态运行时检查与 TypeScript 静态类型系统之间的桥梁
  • 类型守卫本身是普通的 JavaScript 检查(typeof、instanceof 等),类型收窄是编译时的分析结果

2. 内置类型守卫

  • typeof:收窄基础类型,如 typeof x === "string" 将 x 收窄为 string
  • instanceof:收窄类实例类型,如 error instanceof TypeError 将 error 收窄为 TypeError
  • in:检查属性是否存在,如 "swim" in animal 根据属性存在性收窄对象类型
  • Array.isArray:收窄为数组类型
  • 严格相等检查:x === null、x !== undefined 或比较判别字段

3. 自定义类型谓词

  • 函数返回类型声明为 value is TypeName,告诉 TypeScript 当函数返回 true 时参数具有指定类型
  • 例如 function isString(x: unknown): x is string { return typeof x === "string"; }
  • 类型谓词将收窄逻辑封装为可复用的函数,适用于复杂的类型判断场景

4. 断言函数

  • 使用 asserts 关键字,在断言失败时抛出异常,成功时收窄类型
  • 例如 function assertIsString(value: unknown): asserts value is string
  • 断言函数返回后,变量类型已被收窄,无需再写条件分支

5. 判别联合与穷尽检查

  • 判别联合:联合类型的每个成员共享一个字面量属性(如 kind、type),通过检查该属性值进行收窄
  • 在 switch 语句中,每个 case 分支自动收窄到对应的联合成员
  • 使用 never 类型在 default 分支进行穷尽检查:当联合类型新增成员时,编译器会报错提示遗漏
相关文章
TypeScript: 类型判断-合理的使用 is 和 type
Type predicates in TypeScript help you narrowing down your types based on conditionals. They’re similar to type guards, but work on functions. They way the work is, if a function returns true, change the type of the paramter to something more useful.
西南_张家辉
2021-02-02
9.2K0
使用 TypeScript 常见困惑:interface 和 type 的区别是什么?
当我们使用 TypeScript 时,就会用到 interface 和 type,平时感觉他们用法好像是一样的,没啥区别,都能很好的使用,所以也很少去真正的理解它们之间到底有啥区别。我们开发过经常或这么来定义类型:
前端小智@大迁世界
2022-06-15
1.3K0
TypeScript 中的 Array 类型是什么样的?
在 TypeScript 中,Array(数组)是一种数据结构,用于存储多个相同类型的元素。可以通过索引访问和操作数组中的元素。本文将详细介绍 TypeScript 中的 Array 类型,包括 Array 类型的特性、常见操作和注意事项。
网络技术联盟站
2023-07-06
1K0
在 TypeScript 中使用类型守卫的 5 种方式,你都知道吗
类型守卫是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。类型守卫是返回布尔值的常规函数,接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。类型守卫具有唯一的属性,可以确保测试的值返回的是布尔值类型。
前端修罗场
2022-07-29
3.1K0
从两个角度看 Typescript 中的类型是什么?
作者是 Dr. Axel Rauschmayer,号称”德国阮一峰“,本文原文来自于他的博客:https://2ality.com/2020/02/understanding-types-typescript.html,不熟悉他的可以关注一下他的博客。
桃翁
2020-03-17
2.4K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券