keyof는 객체타입을 가져오고 string이나 객체 키의 숫자 리터럴 집합을 생산한다.
type Point = { x: number; y: number };
type P = keyof Point;
위의 코드에서 P타입은 "x"|"y" 와 같다.
만약 타입이 string이나 number 인덱스를 가지고 있다면 keyof는 이 타입을 반환한다
type Arrayish = { [n: number]: unkonwn };
type A = keyof Arrayisy; // type A = number type
type Mapish = { [k: string]: boolean };
type M = keyof Mapish; // type M = string | number
여기서 M의 타입이 string | number인 이유는 자바스크립트에서 객체 키는 항상 string을 강제하기 때문에 obj[0]은 항상 obj["0"]이다