TypeScript 里的类型保护本质上就是一些表达式,它们会在运行时检查类型信息,以确保在某个作用域里的类型是符合预期的。 要自定义一个类型保护,只需要简单地为这个类型保护定义一个函数即可,这个函数的返回值是一个类型谓词:
我们来定义一个类型保护 isCat(),用以确保我们的类型是 Cat。
interface Cat {
climbingTrees();
eat();
}
interface Dog {
swim();
eat();
}
function isCat(pet: Cat | Dog): pet is Cat {
return (<Cat>pet).climbingTrees !== undefined;
}
// 调用类型保护函数 isCat 来确保 pet 类型
if (isCat(pet)) {
pet.climbingTrees();
} else {
pet.swim();
}
这里的 pet is Cat 是类型谓词。类型谓词的语法为 parameterName is Type 这种形式,其中 parameterName 必须是当前函数签名里的一个参数名。