TSでタグ付けと型の合併に関して質問です。
TSで
// typeプロパティタグとする type A = {type: "first", name: string, age: number} type B = {type: "second", name: string, age: string, id: number} type C = {type: "third", name: number, age: number, id: string} type O = A | B | C // 合併型 function f(i: O) { if(i.type === "first") { // タグによる絞り込み i.name // TSがstringと絞り込む i.age // number // i.id エラー } } let n = {type: "first", name: "bob", age: 21, id: 5} as const f(n)
このようなコードを記述すると、if内で i.id
を行うとエラーがスローされます。
ただ、実際には type: "first" メンバーをもち、id: 5 メンバももつオブジェクトは合併型が要求されているのでエラーは出ません。
ここで質問なのですが、このタグはどのような動きをしているのでしょうか
タグで指定すると、たとえ合併型には対応する型を引数で渡しても、そのif節の中では存在しないものとして扱われるのでしょうか
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 06:51