`keyof` 타입 연산자
keyof 타입 연산자
객체 타입을 다루다 보면 "이 객체가 가지고 있는 키들이 정확히 무엇인지" 타입으로 꺼내고 싶을 때가 있어요. keyof 연산자는 바로 그 역할을 하는데, 객체 타입을 받아 그 키들의 문자열·숫자 리터럴 유니온을 만들어 줍니다. 덕분에 우리는 객체의 구조에 맞춰 자동으로 계산되는 타입을 만들 수 있죠.
출처: TypeScript 핸드북
keyof 타입 연산자
keyof 연산자는 객체 타입을 받아서 그 키들의 문자열·숫자 리터럴 유니온을 만들어 냅니다. 아래 예시에서 타입 P는 type P = "x" | "y"와 완전히 같은 타입이에요.
type Point = { x: number; y: number };
type P = keyof Point;
// ^?
만약 타입에 string 또는 number 인덱스 시그니처가 있다면, keyof는 그 대신 해당 타입들을 돌려줍니다.
type Arrayish = { [n: number]: unknown };
type A = keyof Arrayish;
// ^?
type Mapish = { [k: string]: boolean };
type M = keyof Mapish;
// ^?
이 예시에서 M이 string | number인 점에 주목하세요. JavaScript 객체의 키는 항상 문자열로 강제 변환되기 때문에, obj[0]은 언제나 obj["0"]과 같거든요.
keyof 타입은 뒤에서 배울 매핑된 타입(mapped types)과 함께 쓸 때 특히 유용해집니다.