2
下のv2の初期化では、次のようになります。Type 'T[keyof T]' cannot be converted to type 'number'.
何が問題なのですか?Typescript型ガードがジェネリック型のコンテキストで動作するにはどうすればよいですか?
private func<T extends Object>(o:T, prop: keyof(T)): void {
const val = o[prop]
if (typeof val === 'number') {
const v2: number = val as number
}
}
これは、以下、非ジェネリックコンテキストで動作[UPDATE]が、発信者のみがオブジェクト自体の特性を使用することができるので、これは、回避策として有用ではありません。
private func2(o:Object, prop: keyof(Object)): void {
const val = o[prop]
if (typeof val === 'number') {
const v2: number = val as number
}
}
これは私が問題に集中するために抽出した愚かな例です。本当の文脈が助けになるなら、私に知らせてください。
数字にキャストする必要がありますか?タイプが推論されていませんか? –
@MuratK。私がキャストしなければ同じエラー(わずかに異なる言葉で)が起こります。私はキャストを含めました。なぜなら、もし私がいなければ、私はそれを試してほしいというコメントを得ることができたからです! ;-) –
このケースでタイプガードがうまくいかない理由をもっと専門家が説明できれば、感謝しています。私はそれに問題(バグ報告)を書くかどうか疑問に思います。 –