작성
·
260
0
안녕하세요 혹시 제네릭 조건부 타입으로 함수를 정의하였는데요
function double<T extends string | number>( x: T): T extends string ? string:number{
return x;
}
// 이렇게 하면
'T' 형식은 'T extends string ? string : number' 형식에 할당할 수 없습니다.
'string | number' 형식은 'T extends string ? string : number' 형식에 할당할 수 없습니다.
'string' 형식은 'T extends string ? string : number' 형식에 할당할 수 없습니다.
이런 오류가 뜨는데 아직 함수의 반환타입이 정해지지 않아서 그런건가요?
왜 이러는지 이유가 궁금합니다!
답변 1
1
https://github.com/microsoft/TypeScript/issues/48746
이 이슈일텐데요. 제네릭+유니언인 T는 제일 마지막에 평가되므로 T가 뭔지 모르는 상황에서는 T extends string ? string : number도 뭔지 알 수 없어서 문제가 됩니다.
T가 string | number인데 왜 뭔지 모르냐고 하실 수도 있는데, T는 never가 될 수도 있습니다.
never extends string | number === true