オブジェクトのルックアップと関連しますが、オブジェクトのキーを取得できるのがkeyof演算子です。
以下のコード例ではActiveLog型のactiveLogオブジェクトを作成し、そのキーをGet型で指定してオブジェクト要素[
にアクセスしています。
// keyof operator
type ActiveLog = {
lastEvent: Date;
events: {
id: string;
timestamp: Date;
type: "Read" | "Write";
};
};
let activeLog: ActiveLog = {
lastEvent: new Date(),
events: {
id: "active",
timestamp: new Date(),
type: "Read",
},
};
type Get = {
<o extends="" object="" k1="" keyof="" o="">(o: O, k1: K1): O[K1];
<o extends="" object="" k1="" keyof="" o="" k2="">(
o: O,
k1: K1,
k2: K2
): O[K1][K2];
};
let get: Get = (object: any, ...keys: string[]) => {
let result = object;
keys.forEach((k) => (result = result[k]));
return result;
};
console.log(get(activeLog, "events", "timestamp"));
実行結果は、
2023-07-07T04:40:22.301Z
admin