前提・実現したいこと
TypeSrciptのObject(または定数)があるとします。
そのObjectの子のObjectのユニオン型のtypeを作成する方法をご教示いただきたく。
発生している問題・エラーメッセージ
const またはある一定の定数を持つ変数を作成し
そのメンバーのユニオン型を作成したいのですが、どうやって作成すればいいのか、発想が思い浮かばずにおります。
該当のソースコード
TypeScript
1const ITEMS = { 2 a: { id: 1, value: "1111" }, 3 b: { id: 2, value: "2222" }, 4} as const 5 6type myType = { [P in keyof typeof ITEMS]: typeof ITEMS[P] } 7 8const f = (item:myType) => { 9 console.log(item); 10 // a: { id: 1, value: "1111" } 11 // or 12 // b: { id: 2, value: "2222" } 13} 14 15f(ITEMS.a) //こういう呼び出し方をしたい。 16/* 17型 '{ readonly id: 1; readonly value: "1111"; }' の引数を型 'myType' のパラメーターに割り当てることはできません。 18 型 '{ readonly id: 1; readonly value: "1111"; }' には 型 'myType' からの次のプロパティがありません: a, bts(2345) 19const ITEMS: { 20 readonly a: { 21 readonly id: 1; 22 readonly value: "1111"; 23 }; 24 readonly b: { 25 readonly id: 2; 26 readonly value: "2222"; 27 }; 28} 29*/
試したこと
定数にしてみたり、Typeにしてみたり、右往左往・・・
TypeScript
1 2const itemsType = { 3 a: { id: 1, value: "1111" }, 4 b: { id: 2, value: "2222" }, 5} as const 6 7type myType = { [P in keyof typeof itemsType]: typeof itemsType[P] } 8/* 9type myType = { 10 readonly a: { 11 readonly id: 1; 12 readonly value: "1111"; 13 }; 14 readonly b: { 15 readonly id: 2; 16 readonly value: "2222"; 17 }; 18} 19*/
補足情報
const 部分はどういった宣言でもいいのですが、そもそも、
こういった型から、
TypeScript
1const ITEMS = { 2 a: { one:string, two:string }, 3 b: { one:string, two:string }, 4} // as const
このようなユニオン型を作れるのかどうか、あれはその記述方法をご教示いただけますと幸いです。
TypeScript
1const expect = {a: { one:string, two:string }} | {b: { one:string, two:string }}
不足情報があれば、ご指摘いただけますと幸いです。
お手数をおかけいたしますが、よろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/02 01:38
2021/07/02 01:42 編集