以下のような実装では、別々のプロパティを持ったオブジェクト型の返り値を返す関数を定義したいのですが、ユニオン型だと呼び出しの時点で両方共通するプロパティしかアクセスすることができません。関数実行時に各オブジェクトを特定するような関数を作ることは出来ないでしょうか?
typescript
1interface TypeA { 2 name: 'A' 3 num: number 4} 5interface TypeB { 6 name: 'B' 7 str: string 8} 9 10function selectType(t: 'A' | 'B'): TypeA | TypeB | undefined { 11 if(t === 'A') return {name: 'A', num: 1} 12 13 if(t === 'B') return {name: 'B', str: "hoge"} 14 15 return undefined 16} 17 18console.log(selectType('A').name) // A 19console.log(selectType('B').name) // B 20 21 22/* Property 'num' does not exist on type 'TypeA | TypeB'. 23 Property 'num' does not exist on type 'TypeB' */ 24console.log(selectType('A')?.num) // error -> 期待値: 1 25 26console.log(selectType('B')?.str) // error -> 期待値: hoge 27 28
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。