TypeScriptにおいてIndex SignatureとGenericsの組み合わせは可能か
Q&A
Closed
解決したいこと
同じ構造をもつObjectが複数あるとします.
// data1
{
prop1: {
count: 0
},
attr2: {
count: 2
},
}
// data2
{
foo1: {
count: 1
},
bar4: {
count: 0
},
}
...
それぞれのObjectのkeyが不変でない時,通常はそれぞれの型を以下のように定義すると思います.
type Data1Type = {
[key: string]: {
count: number
}
}
// もしくは
type Data1Key = keyof typeof data
type Data1Type = {
[key in Data1Key]: {
count: number
}
}
data2
以降も同様に定義されますが,省略します.
ここで,data
の構造は同じであるためGenericsを使って抽象化できないかと考えました.
失敗例
type DataType<K> = {
[key in K]: { // 型 'K' を型 'string | number | symbol' に割り当てることはできません。
count: number
}
}
const data: DataType<keyof typeof data1> = Object.entries(data1).reduce(...)
しかし,このコードではうまく定義できません.何かいい方法はあるでしょうか?
あまり良い定義方法ではないことを前提の上で解答よろしくお願いします.
発生している問題・エラー
型 'K' を型 'string | number | symbol' に割り当てることはできません。
0