😎

TypeScriptのkeyofが便利

2020/11/28に公開

最近、仕事でTypeScriptを触ることが増えてきました。
まだまだ型に慣れず、なんでlinterに怒られるのかわからないことも多いのですが、少しずつ慣れてきています。

そんな感じでちょこちょこTypeScriptを触っている途中、keyofという便利なものを知ったので、そのメモです。

少し大きめのプログラムを書いていると何かのコード表的なものを表現したくなる時が出てきます。
例えば、色コードなどをReactでコンポーネントを作成した時、コンポーネントの色を指定させるのに直接、FF0000とか記述していくのは抵抗があると思いますが、Redとかになってると使いやすいかと思います。

そういう時にkeyofを使うとすごく便利でした。

下にサンプルを示します。

const Colors = {
  Red: "#FF000",
  Green: "#00FF00",
  Blue: "#0000FF",
}
type Color = keyof typeof Colors;

const selectColor = (color: Color): string => Colors[color];

console.log(selectColor('Blue'));   // #0000FFが表示される。yellowとするとエラー

keyof typeof ColorsのところでColorsのキーをそのまま型として定義しているということです。
下と同じ定義をkeyofを使うことで実現出来ているわけです。

type Color = "Red" | "Green" | "Blue"

なので、selectColorの引数にYellowとか指定してもエラーとなります。

知れば知るほど便利な言語であることがわかります。

Discussion