TypeScripのkeyofについて
TypeScriptのHandbookに一通り目を通す、というチャレンジを今週はしております。
なんとも読みにくい英語だなーなんて思いながら読んでたらkeyof
という知らない演算子が出てきたので、調べてみました。
keyofが出てきたのはこちらの「Using Type Parameters in Generic Constraints」というセクション。
サンプルコードを引用すると、
function getProperty<T, K extends keyof T>(obj: T, key: K) { return obj[key]; } let x = { a: 1, b: 2, c: 3, d: 4 }; getProperty(x, "a"); // okay getProperty(x, "m"); // error: Argument of type 'm' isn't assignable to 'a' | 'b' | 'c' | 'd'.
こう。
どうやら、keyof
にオブジェクトのキーを渡すと、そのオブジェクトのキーのいずれかを取るUnion Typeになるみたいです。
単純にするとこう
interface HogeInterface { a: string; b: number; c: boolean; } type Keys = keyof HogeInterface; const hogeKey: Keys = 'a'; const fugaKey: Keys = 'd'; // error
Keys
は'a'
or 'b'
or'c'
になります。
特定のオブジェクトのkeyの値しか許容しない、みたいなパターンの時に使えるって話なんだとは思うのだがこれがどこで使えるのか…というのはちょい謎。。。
誰か教えてほしい。
追記 2019/06/15
誰か教えて欲しい。
と書いていたら本当に教えてくれた方がいました。感謝。