제네릭 함수는 any처럼 정보를 버리지 않는다

identity<T>(arg: T): T는 입력 타입을 반환 타입까지 연결해 이후 메서드 사용을 안전하게 만든다.

Input
identity("hello")에서 인자 타입을 확인
T binding
T가 string으로 고정
Return
반환값도 string으로 추론
Safe use
length 같은 string 멤버를 안전하게 사용
신호대응
any 사용반환 타입이 흐려져 후속 오류가 늦게 드러남
generic 사용입력과 반환의 관계가 타입으로 보존됨
제약 추가필요한 속성이 있으면 extends로 최소 조건만 요구

핵심 제네릭의 핵심은 타입을 넓히는 것이 아니라 관계를 보존하는 것이다.