"기본값은 선택지를 줄이지 않아. 대부분의 호출자가 같은 선택을 반복해서 적는 일을 없애."
함수 기본값과 닮은 문법
type Result<T, E = Error>에서 E의 기본값은 호출자가 두 번째 타입 인자를 생략했을 때 Error를 사용하겠다는 뜻이야. Result<User>는 Result<User, Error>와 같고, 특별한 오류가 필요하면 직접 바꿀 수 있어.
이 기능은 타입의 표현력을 늘리기보다 사용성을 다듬어. 흔한 경우는 짧게, 드문 경우는 여전히 정확하게 적게 해.
제약과 함께 쓸 수 있어
T extends Event = Event처럼 제약과 기본값을 함께 적을 수 있어. 기본값 자체도 제약을 만족해야 한다. 제약은 허용 범위를 정하고 기본값은 생략 시 선택을 정하므로 역할이 서로 달라.
추론이 기본값보다 먼저야
값 인자에서 타입을 추론할 수 있다면 컴파일러는 그 정보를 사용해. 기본값은 추론할 근거도, 명시한 타입 인자도 없을 때 들어간다. ‘기본값을 적었으니 항상 이 타입으로 시작한다’고 이해하면 호출 결과가 예상과 달라질 수 있어.
기본값이 너무 많으면 의도가 흐려져
모든 타입 매개변수에 기본값을 붙이면 호출은 짧아지지만 어떤 계약이 선택됐는지 감춰질 수 있어. 명백하고 안정적인 기본값에만 써. 도메인에서 반드시 결정해야 하는 선택은 호출자에게 남겨 두는 편이 낫다.
흔한 예로 Action<Payload = undefined>, Container<T = unknown>, Component<P = {}>처럼 자주 쓰는 자리에 기본 타입을 둘 수 있어. 기본값은 흔한 호출을 짧게 만들고 필요할 때만 명시적으로 덮어써.