-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
제네릭 조건부 타입 함수
23.02.04 13:02 작성 조회수 195
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
조현영
지식공유자2023.02.04
https://github.com/microsoft/TypeScript/issues/48746
이 이슈일텐데요. 제네릭+유니언인 T는 제일 마지막에 평가되므로 T가 뭔지 모르는 상황에서는 T extends string ? string : number도 뭔지 알 수 없어서 문제가 됩니다.
조현영
지식공유자2023.02.04
T가 string | number인데 왜 뭔지 모르냐고 하실 수도 있는데, T는 never가 될 수도 있습니다.
never extends string | number === true
조현영
지식공유자2023.02.04
function double<T extends ([T] extends [string] ? string : number)>( x: T): [T] extends [string] ? string:number{
return x;
}
const a = double('hi');
const b = double(123);
답변 1