본문 바로가기
WEB/타입 챌린지

[Type Challenge] Exclude

by IT황구 2023. 3. 26.
728x90
반응형

문제

 

문제 의도 및 개념정리

  • 제네릭과 유니온이 합쳐졌을때의 특징
  • 제네릭 타입에 유니온이 들어오면 분배법칙처럼 작동한다. 해답에 자세한 설명 참조.
  • Distributive Conditional Type
    • 분산되는 조건부 타입에 대해서 알아야한다.

 

내가 생각한 풀이 방법

  • extends와 ? 를 써서 뭔가 할 수 있지 않을까?
  • T에 들어온걸 순회한다
  • T가 U에 들어갈 수 있는지 체크후에 제거 및 추가.

실행하지 못했던 이유 및 해결 방법

  • 제외는 어떻게 하는지?
    • never가 생각이 안났다. good
  • Union Type을 어떻게 순회하란거임?
    • T가 유니온일때 T extends U 의 형태를 하면 된다. 자동으로 분배법칙 적용해줌
    • 유니온타입이 제네릭으로 들어오면 자동으로 분배를 시켜준다.
  • 분배법칙을 사용하지 않으려면 제네릭을 [T] 처럼 대괄호로 감싸야한다.

해답

MyExclude<'a' | 'b' | 'c', 'a'>, 'b' | 'c'>

 

타입 스크립트는 위의 예시를 아래처럼 변환한다.

MyExclude<'a', 'a'> | MyExclude<'b', 'a'> | MyExclude<'c', 'a'>

 

MyExclude<'a', 'a'> 는 아래처럼 작동한다.

= 'a' extends 'a' ? never : 'a'

= never

 

MyExclude<'b', 'a'> 는 아래처럼 작동한다.

= 'b' extends 'a' ? never : 'b'

= 'b'

 

따라서

never | 'b' | 'c'

= 'b' | 'c'

가 되는것이다.

 

 

728x90
반응형

'WEB > 타입 챌린지' 카테고리의 다른 글

[Type Challenge] BEM style string  (0) 2023.04.07
[Type Challenge] Absolute  (0) 2023.04.03
[Type Challenge] Length of Tuple  (0) 2023.04.02
[Type Challenge] Pick  (0) 2023.04.01
[Type Challenge] Concat  (0) 2023.03.23