제네릭 함수는 any처럼 정보를 버리지 않는다
identity<T>(arg: T): T는 입력 타입을 반환 타입까지 연결해 이후 메서드 사용을 안전하게 만든다.
identity("hello")에서 인자 타입을 확인
T가 string으로 고정
반환값도 string으로 추론
length 같은 string 멤버를 안전하게 사용
| 신호 | 대응 |
|---|---|
| any 사용 | 반환 타입이 흐려져 후속 오류가 늦게 드러남 |
| generic 사용 | 입력과 반환의 관계가 타입으로 보존됨 |
| 제약 추가 | 필요한 속성이 있으면 extends로 최소 조건만 요구 |
핵심 제네릭의 핵심은 타입을 넓히는 것이 아니라 관계를 보존하는 것이다.