我正在閱讀Typescript手冊中的User-Defined Type Guards。假設你有要縮小如下的聯合類型:替代方法使用用戶定義的類型警衛?
interface Bird{
fly();
layEggs();
}
interface Fish{
swim();
layEggs();
}
class SmallPet implements Fish,Bird{
constructor(){
}
fly() { console.log("fly")};
swim() { console.log("swim")};
layEggs() {console.log("laying eggs") };
}
function getSmallPet(): Fish | Bird{
return new SmallPet();
}
function isFish(pet: Fish | Bird): pet is Fish{
return (<Fish>pet).swim !== undefined;
}
let pet = getSmallPet();
if (isFish(pet))
pet.swim(); //works
功能isFish是一個用戶定義的類型衛隊在手冊中提到。我的問題是如何工作?我試圖達到同樣的效果更草率的方式,這不是明顯的去上班:
pet is Fish;
pet.swim(); //doesn't work
不打字稿已經解析,看起來像一個後衛類型的函數來實現該功能,然後縮小範圍函數調用的類型?有沒有其他的方式來保護警衛隊?