Generic constraint

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

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

추론이 지나가는 순서

1

객체에서 T 추론

user 객체를 보고 name, age, city 속성을 가진 타입을 만듭니다.

2

keyof T 계산

가능한 키는 "name" | "age" | "city" 유니온이 됩니다.

3

K 제한

"address"처럼 목록 밖의 문자열은 인자로 받을 수 없습니다.

4

값 타입 반환

key가 "age"이면 결과는 number, "name"이면 string입니다.

통과 getProperty(user, "age") → number
차단 getProperty(user, "address") → key 오류