前提・実現したいこと
TypeScriptであるリテラル型を取り除いた型を作りたいです。
現在、以下のようなオブジェクトのtypeプロパティに応じて出力を変えるプログラムを作成しています。
単純にstring型を設定したら、型が重複するようでエラーが出ました。
どのような型を作成すればエラーが解決できるでしょうか?
よろしくお願いいたします。
発生している問題・エラーメッセージ
TS2339: Property 'hogehoge' does not exist on type '{ type: "hoge"; hogehoge: string; } | { type: string; else: {}; }'. Property 'hogehoge' does not exist on type '{ type: string; else: {}; }'.
該当のソースコード
TypeScript
1type XXX = { 2 type: 'hoge', 3 hogehoge: string, 4} | { 5 type: 'fuga', 6 fuga: number, 7} | { 8 type: 'hoge'と'fuga'以外のstring, 9 else: {}, 10}; 11 12function test(x: XXX) { 13 switch(x.type) { 14 case 'hoge': 15 console.log(x.hogehoge); 16 break; 17 case 'fuga': 18 console.log(x.fuga); 19 break; 20 default: 21 console.log(x.else); 22 break; 23 } 24}
試したこと
Utility Typesというのも調べてみたのですが、Excludeはユニオン型以外には用いれないそうです。(参考サイト)
補足情報(FW/ツールのバージョンなど)
tsconfig.jsonです。
json
1{ 2 "compilerOptions": { 3 "target": "es2020", 4 "module": "es2020", 5 "strict": true, 6 "esModuleInterop": true, 7 "skipLibCheck": true, 8 "forceConsistentCasingInFileNames": true 9 } 10}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。