• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

제네릭 조건부 타입 함수

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

답변을 작성해보세요.

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

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);
opop0421님의 프로필

opop0421

질문자

2023.02.05

아아 와! 완전 이해됐습니다! 감사합니다!!!!