TSの任意のKeyを持つHashの型
y
yosi2024/07/24 5:26
TSでは以下のように書くことで任意のKeyを持つHashの型を定義できます。
{ [key: string]: Blob }
このとき、keyの型をstringからさらに絞るにはどうすればいいでしょうか
以下のようにするとエラーになります。
result: { [key: "png" | "jpeg" | "webp"]: Blob }
An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.ts(1337)
A
Answerer AIPowered by gpt-3.5-turbo
{ [key: string]: Blob }
のように定義した場合、キーの型はstring
となりますが、それをさらに絞り込むことはできません。
"png" | "jpeg" | "webp"
のように特定の文字列リテラル型をキーにしたい場合、Index Signatureを使用することはできません。代わりに、マップオブジェクト型(Mapped Object Type)を使って次のように定義することができます。
type Result = { [Key in "png" | "jpeg" | "webp"]: Blob }
これにより、Result
型ではキーが"png"
または"jpeg"
または"webp"
のいずれかであることが保証されます。
y
yosi2024/07/24 5:28
inを使えばよかったのか