ハンドブックをさっと読んだばかりという程度なのですが・・・
そのハンドブックの共用型で、以下のようなサンプルコードをみて疑問が湧いています
下記のif文の条件節内で型アサーションしてしまったら("(<Fish>pet).swim")
それはは必ずtrueになって条件分岐の意味がなくなるのでは?
と思いましたが、実行結果はコンソールに ’bird’ と出ます。
常套手段としてはpet.hasOwnProperty('swim')と思うのですが・・・
後続の 型述語 のコード内にも同様のものがみられます。
これは型アサーションではないのでしょうか?
ここはどのように理解すべきでしょうか?
TypeScript
1interface Bird { 2 fly(): void; 3 layEggs(): void; 4 twiple(): void; 5} 6 7interface Fish { 8 swim(): void; 9 layEggs(): void; 10} 11 12function getSmallPet(): Fish | Bird { 13 class Hawk implements Bird { 14 constructor() {} 15 fly() {} 16 layEggs() {} 17 twiple() { 18 console.log("Twipled!!"); 19 } 20 } 21 return new Hawk(); 22} 23 24let pet = getSmallPet(); 25 26if ((<Fish>pet).swim) { 27 console.log("fish"); 28} else { 29 console.log("bird"); 30} 31
TypeScript
1function isFish(pet: Fish | Bird): pet is Fish { 2 return (<Fish>pet).swim !== undefined; 3} 4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/20 02:34