TypeScript type predicates 实际上是一种用户定义的 type guard 的实现方式。
要定义用户定义的类型保护,我们只需要定义一个返回类型为类型谓词 (type predicates) 的函数:
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
在这个例子中,pet is Fish 是我们的类型谓词。 谓词采用 parameterName is Type 形式,其中 parameterName 必须是当前函数签名中的参数名称。
例子:
type Fish = { swim: () => void };
type Bird = { fly: () => void };
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
function getSmallPet(index:number){
if( index === 1){
return {
swim: () => console.log('Hello')
}
}
return {
fly: () => console.log('!')
}
}
let pet = getSmallPet(1);
if (isFish(pet)) {
pet.swim();
} else {
pet.fly();
}
网友评论