04 类型守卫

类型守卫(Type Guards) #

类型守卫是 TypeScript 中用于在运行时检查类型并缩小类型范围的机制,帮助在条件分支中更精确地处理类型。

基本概念 #

类型守卫允许在 if 语句或其他控制流中,根据条件缩小变量的类型范围。常见的类型守卫包括 typeof、instanceof、in 操作符以及用户自定义的类型谓词函数。

使用场景 #

  • 处理联合类型时,根据条件区分不同类型。
  • 在函数中验证参数类型,确保类型安全。
  • 结合类型断言,提供更安全的类型检查。

示例代码 #

function isString(value: unknown): value is string {
  return typeof value === 'string';
}

function processValue(value: string | number) {
  if (isString(value)) {
    console.log(value.toUpperCase()); // value 被缩小为 string
  } else {
    console.log(value.toFixed(2)); // value 被缩小为 number
  }
}

最佳实践 #

  • 优先使用 typeof 和 instanceof 等内置守卫进行简单检查。
  • 对于复杂类型,使用自定义类型谓词函数(返回类型为 value is Type)。
  • 避免过度使用类型断言,优先选择类型守卫以保持类型安全。
  • 在大型项目中,结合类型守卫提升代码的可读性和维护性。