Generic constraint

getProperty는 키와 반환 타입을 함께 묶습니다

K extends keyof T는 두 번째 인자가 실제 객체 키 중 하나인지 먼저 확인하고, T[K]로 결과 타입을 보존합니다.

추론이 지나가는 순서

단계 타입 식 컴파일러가 확정하는 것
1. 객체에서 T 추론 T = User name, age, city 속성을 가진 객체 구조를 보존합니다.
2. 키 집합 계산 keyof T 가능한 키를 "name" | "age" | "city"로 좁힙니다.
3. K를 키로 제한 K extends keyof T "address"처럼 목록 밖의 문자열은 인자로 받지 않습니다.
4. 값 타입 반환 T[K] "age"를 넣으면 number, "name"을 넣으면 string이 됩니다.
통과 getProperty(user, "age") returns number
차단 getProperty(user, "address") blocks key error