호출 때 결정
함수 이름 뒤의 T는 호출 시 실제 타입으로 대체되어 내부와 반환에 공유됩니다.
identity<T>(arg: T)
제네릭 함수의 타입 변수는 아무 타입이나 허용한다는 뜻이 아니라 들어온 타입 정보를 결과까지 연결하는 이름입니다.
함수 이름 뒤의 T는 호출 시 실제 타입으로 대체되어 내부와 반환에 공유됩니다.
identity<T>(arg: T)
입력 두 개의 타입이 서로 다르면 T와 U처럼 별도 타입 변수로 표현합니다.
<T, U>
length 같은 속성을 쓰려면 extends로 최소 조건을 먼저 선언합니다.
T extends { length: number }
객체와 키를 함께 받을 때 K extends keyof T로 잘못된 키 접근을 막습니다.
K extends keyof T
제네릭은 범용성을 얻으면서도 타입 정보를 버리지 않게 해 주는 함수 설계의 핵심 도구입니다.