TypeScript 速習チュートリアル

TypeScript の keyof

keyof は、オブジェクト型からキーの型を抽出するために使用される TypeScript のキーワードです。

1. 明示的なキーを持つオブジェクトでの keyof

明示的なキーを持つオブジェクト型に対して keyof を使用すると、それらのキーを要素とするユニオン型(Union Type)が作成されます。

interface Person {
  name: string;
  age: number;
}

// ここでの `keyof Person` は、"name" | "age" というユニオン型を作成します。
// これにより、他の文字列は受け付けられなくなります。
function printPersonProperty(person: Person, property: keyof Person) {
  console.log(`Personのプロパティ ${property} を出力中: "${person[property]}"`);
}

let person = {
  name: "マックス",
  age: 27
};

printPersonProperty(person, "name"); // Personのプロパティ name を出力中: "マックス"

2. インデックスシグネチャを持つオブジェクトでの keyof

keyof は、インデックスシグネチャ(Index Signatures)を持つオブジェクト型からインデックスの型を抽出するためにも使用できます。

type StringMap = { [key: string]: unknown };

// ここでの `keyof StringMap` は `string` 型として解決されます。
function createStringPair(property: keyof StringMap, value: string): StringMap {
  return { [property]: value };
}

このように、keyof を活用することで、オブジェクトの構造に依存した動的な型定義を安全に行うことが可能になります。