質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

770閲覧

if文の条件節内の型アサーション・・・ですか?

TOMIYASU_chan

総合スコア21

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/07/20 01:39

編集2019/07/20 01:48

ハンドブックをさっと読んだばかりという程度なのですが・・・
そのハンドブックの共用型で、以下のようなサンプルコードをみて疑問が湧いています

下記の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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

それはは必ずtrueになって条件分岐の意味がなくなるのでは?

いえ、これは無理やり型を読み替えるだけですので、中身がBirdだった場合にもswimプロパティを読みに行って、undefinedが取得され、条件としては偽になります。

投稿2019/07/20 01:52

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TOMIYASU_chan

2019/07/20 02:34

ありがとうございます。 無理やり型情報を変更しても、実体の方に 無いものは無いという結果がでるので判定できると。 確かに'pet.swim'としてしまうと、petそのものは 共用型なので「'swim' は型 'Bird | Fish' に存在しません」となります。 便宜上、どちらかの方に絞る必要がああるのでこうなっているわけですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問