TypeScript 面试题
目录

请解释 TypeScript 中的类型保护 (Type Guards) 的概念和作用。如何使用类型保护缩小类型范围?

· 约 4 分钟读完 · 第 61 / 256 章

推荐答案

TypeScript 中的类型保护(Type Guards)是一种机制,用于在运行时检查变量的类型,并在代码块中缩小该变量的类型范围。通过类型保护,开发者可以在特定的代码块中安全地使用特定类型的属性和方法,而不会引发类型错误。

常见的类型保护方式包括:

  1. typeof 类型保护:用于检查基本类型(如 string、number、boolean 等)。
  2. instanceof 类型保护:用于检查类的实例。
  3. 自定义类型保护:通过定义一个返回类型谓词(parameterName is Type)的函数来实现。

类型保护的作用是帮助 TypeScript 编译器在特定代码块中推断出更精确的类型,从而避免不必要的类型断言或类型错误。


本题详细解读

1. typeof 类型保护

typeof 类型保护用于检查变量的基本类型。例如:

在上面的例子中,typeof value === "string" 是一个类型保护,它告诉 TypeScript 编译器在 if 块中 value 是 string 类型,而在 else 块中 value 是 number 类型。


2. instanceof 类型保护

instanceof 类型保护用于检查一个对象是否是某个类的实例。例如:

在这个例子中,animal instanceof Dog 是一个类型保护,它帮助 TypeScript 编译器在 if 块中推断 animal 是 Dog 类型,而在 else 块中推断 animal 是 Cat 类型。


3. 自定义类型保护

自定义类型保护是通过定义一个返回类型谓词(parameterName is Type)的函数来实现的。例如:

在这个例子中,isFish 是一个自定义类型保护函数,它通过检查 pet 是否具有 swim 方法来判断 pet 是否是 Fish 类型。pet is Fish 是类型谓词,它告诉 TypeScript 编译器在 if 块中 pet 是 Fish 类型。


4. 类型保护的作用

类型保护的主要作用是:

  • 缩小类型范围:在特定的代码块中,TypeScript 编译器可以推断出更精确的类型。
  • 避免类型错误:通过类型保护,开发者可以安全地访问特定类型的属性和方法,而不会引发类型错误。
  • 提高代码可读性:类型保护使代码的逻辑更加清晰,减少了类型断言的使用。