chengaofeng
发布于 2024-07-04 / 11 阅读
0
0

什么是typescript自定义守卫?

TypeScript中的自定义类型守卫(Custom Type Guards)是一种特殊的函数或表达式,用于在运行时检查一个值是否属于特定的类型。通过使用类型守卫,TypeScript编译器能够在特定的作用域内准确地推断出值的类型,从而提供更严格的类型检查和更智能的代码自动完成等功能。

自定义类型守卫通常通过定义一个返回值是类型谓词(type predicate)的函数来实现。类型谓词的形式为 parameterName is Type,其中parameterName必须是当前函数参数的一个名称。

下面是一个自定义类型守卫的例子:

interface Bird {
  fly(): void;
  layEggs(): void;
}

interface Fish {
  swim(): void;
  layEggs(): void;
}

// 自定义类型守卫
function isFish(pet: Fish | Bird): pet is Fish {
  return (pet as Fish).swim !== undefined;
}

// 使用自定义类型守卫
function getPet(pet: Fish | Bird) {
  if (isFish(pet)) {
    // 在这个分支中,TypeScript知道pet是Fish类型
    pet.swim();
  } else {
    // 在这个分支中,TypeScript知道pet是Bird类型
    pet.fly();
  }
}

在上面的例子中,isFish函数是一个自定义类型守卫,它通过检查pet对象是否有swim方法来判断该对象是否为Fish类型。一旦isFish函数被调用,TypeScript编译器就能在相应的分支中准确地推断出pet的类型,从而允许我们安全地访问Fish或Bird特有的方法。


评论