Noh | エンジニア向け情報共有コミュニティ
Signup / Login

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を使えばよかったのか

コメントするにはログインが必要です
y
yosi