keyof 연산자는 TypeScript에서 특정 타입 T의 모든 키(key)들의 유니언 타입을 반환합니다. 예를 들어, T가 { name: string; age: number; }인 경우, keyof T는 "name" | "age"와 같은 유니언 타입이 됩니다.
이 구문은 매핑된 타입에서 사용되며, P는 T의 키들 중 하나를 순회(iterate)하게 됩니다. 즉, keyof T로부터 얻은 키들 각각에 대해 어떤 작업을 수행할 수 있게 해줍니다.
type Person = {
name: string;
age: number;
address: string;
};
// 매핑된 타입을 사용하여 모든 속성을 optional로 만드는 예제
type PartialPerson = {
[P in keyof Person]?: Person[P];
};
위 예제에서 PartialPerson 타입은 Person 타입의 모든 속성을 optional로 만듭니다. 각 속성 P는 Person 타입의 키들("name", "age", "address")을 순회하며, 해당 속성을 optional로 지정합니다.
즉, PartialPerson 타입은 다음과 같이 정의됩니다:
type PartialPerson = {
name?: string;
age?: number;
address?: string;
};