Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

オブジェクトのキーの型は PropertyKey 型

Mapped typesを扱う時、よくstring | number | symbolが出てきますよね?実はこれと同じ型が PropertyKeyというビルトイン型であります。

type keys = PropertyKey; // string | number | symbol

実は、これと同じものは keyof any から導出できます。ただ、微妙に違いがあります。

keyofStringsOnly オプションの有無によって keyof any の挙動が異なります。

// "keyofStringsOnly": true
type keys1 = keyof any; // string
type keys2 = PropertyKey; // string | number | symbol
// "keyofStringsOnly": false
type keys1 = keyof any; // string | number | symbol
type keys2 = PropertyKey; // string | number | symbol