私は2つのユニオンタイプを持っています.1つはプロパティを持ち、もう1つは持っていません。私は、そのプロパティの存在をチェックすると、それを絞り込むことができますが、それは動作していないと仮定しました。未定義のプロパティを持つシンプルなTypeScriptユニオンタイプを絞り込むことはできません。
私はthis Playground reproを作成しました。この他のvery similar thingはうまくいくようです。私は組合を間違った方法で使用していますか?
ここでは完全を期すためのコードは次のとおりです。
export interface AuthenticatedProfile {
readonly userId: string;
readonly name: string;
}
export interface AnonymousProfile {
readonly userId: undefined;
readonly otherProp: string;
}
export type Profile = AnonymousProfile | AuthenticatedProfile;
function handleProfile(prof: Profile) {
if (prof.userId) {
console.log(prof.name);
}
}
ありがとう!
あなたの解決策はよく見えます。プロパティuserIdが両方の型の一部であり、それぞれの型が互いに異なる値のセットしか取れない場合、なぜ私の元のチェックの後に型変換が型を推論できないのでしょうか? –
私が 'prof.userId'を呼び出すのは、型ガードなしでうまく動作します。 – toskv
実際には既知の問題であるようです。 https://github.com/Microsoft/TypeScript/issues/12600。なぜあなたはエラーが表示されないのか分からない、それは私が投稿した遊び場のreproのすぐそこにあるprof.userIdにアクセスするその遊び場のリンクでちょうどうまく動作する –