"`keyof T` 가 T 의 key 의 타입. 한 번 가지면 T 의 모든 key 관계 탐색 가능."
`keyof` 가 만드는 거
keyof T 가 T 의 key 이름의 literal 타입 union 으로 평가. keyof { id: number; name: string } 가 'id' | 'name'. 결과가 type-layer 전용; runtime 엔 `Object.keys()` 써서 같은 정보를 runtime 문자열로.
Union 이 타입-안전 key 탐색 가능하게 만드는 거. 함수 parameter 를 K extends keyof T 로 제약 가능하고, compiler 가 실제 key 만 전달되는지 보장.
배열과 tuple 의 keyof
keyof string[] 가 숫자 index 와 배열 method ('length' | 'push' | 'pop' | ... | number) 둘 다 포함. Tuple 엔 key 가 각 위치의 숫자 literal 과 같은 method. 가끔 유용, 더 자주 surprise — 배열엔 보통 `keyof T[]` 아니라 `T[number]` (element 타입) 원해.
keyof + indexed-access 패턴
T[keyof T] 가 T 의 모든 value 타입의 union. { a: number; b: string }[keyof T] 가 `number | string` 으로 평가. 이 쌍이 끊임없이 나타나: 이름엔 keyof, 값엔 indexed access, 함께 '이 object 타입의 어떤 거든'.
`keyof` 가 `Object.keys()` 의 타입-레벨 analog. Object property 의 이름 줘 — 근데 compile 시점에 가능한 타입으로.