下記URLをクリックでエラーを再現できます。
http://www.typescriptlang.org/play?略
js
1type A = {type:"A"}; 2type B = {type:"B"}; 3type C = (A|B) & {ext:true}; 4const val :C[] = [{type:"A",ext:true},{type:"B",ext:true}]; 5const r1:B = val.find((a):a is B=>a.type == "B")!;//ここでエラー
5行目の、val配列をfindで絞ってBに型変換したいです。
この書き方ですと変数r1は{type:"B",ext:true}
になり、型Bの条件を問題なく満たしているのですが、何故エラーになるのでしょうか?
extという型Bに無い余計なプロパティがある事については、以下がエラー無く通るので問題は無いはずです。
js
1 2type A2 = {type:"A"}; 3type B2 = {type:"A",ext:true}; 4const x2 : B2= {type:"A",ext:true} ; 5const y2 : A2 = x2; 6//y2は実際はextプロパティがあるが、A2型に変換したのでアクセス出来ない。が、エラーにはなっていない
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。