ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

TypeScripのkeyofについて

TypeScriptのHandbookに一通り目を通す、というチャレンジを今週はしております。

なんとも読みにくい英語だなーなんて思いながら読んでたらkeyofという知らない演算子が出てきたので、調べてみました。


keyofが出てきたのはこちらの「Using Type Parameters in Generic Constraints」というセクション。

www.typescriptlang.org

サンプルコードを引用すると、

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

誰か教えて欲しい。

と書いていたら本当に教えてくれた方がいました。感謝。

shgam.hatenadiary.jp