ZeroCho / ts-book

타입스크립트 교과서 소스 코드
35 stars 5 forks source link

[112p] 컨디셔널 타입의 분배법칙 막기 #52

Open dev-hobin opened 7 months ago

dev-hobin commented 7 months ago
function test<T extends ([T] extends [string] ? string : never)>(a: T) {
  type R<T> = [T] extends [string] ? T : T;
  const b: R<T> = a
}

112p 에서 위의 예제로 제네릭이 들어있는 컨디셔널 타입을 판단할 때 판단을 뒤로 미루는 것을 배열로 막는 방법을 소개하는데요. 위의 예제를 아래로 바꾸어도 정상적으로 작동합니다.

function test<T>(a: T) {
  type R<T> = [T] extends [string] ? T : T;
  const b: R<T> = a
}

제 생각은 타입스크립트는 제네릭 타입의 컨디셔널 타입을 판단할 때 판단을 코드의 실행 시점으로 미루어 정적으로 타입추론을 해줄 수 없는것은 맞지만, 제네릭 변수의 선언 시점(위의 예제의 경우 function test<T>)에 어떤 타입을 받을 수 있는지 가장 넓은 타입의 제약을 걸어주는 것과는 관련이 없다고 생각합니다.

제가 하고 있는 생각이 맞는 방향인지 틀린 방향인지 궁금하고 제 생각이 맞다면 다음 개정판에서 두 번째 예제로 코드를 변경하는 것을 제안해봅니다!

ZeroCho commented 7 months ago

답변이 늦었습니다. 지적해주신 부분이 맞습니다. 다음 쇄에서 수정해놓겠습니다!