728x90
반응형
문제
문제 의도 및 개념정리
- 제네릭과 유니온이 합쳐졌을때의 특징
- 제네릭 타입에 유니온이 들어오면 분배법칙처럼 작동한다. 해답에 자세한 설명 참조.
- Distributive Conditional Type
- 분산되는 조건부 타입에 대해서 알아야한다.
내가 생각한 풀이 방법
- extends와 ? 를 써서 뭔가 할 수 있지 않을까?
- T에 들어온걸 순회한다
- T가 U에 들어갈 수 있는지 체크후에 제거 및 추가.
실행하지 못했던 이유 및 해결 방법
- 제외는 어떻게 하는지?
- never가 생각이 안났다. good
- Union Type을 어떻게 순회하란거임?
- T가 유니온일때 T extends U 의 형태를 하면 된다. 자동으로 분배법칙 적용해줌
- 유니온타입이 제네릭으로 들어오면 자동으로 분배를 시켜준다.
- 분배법칙을 사용하지 않으려면 제네릭을 [T] 처럼 대괄호로 감싸야한다.
해답
![](https://blog.kakaocdn.net/dn/dB1hNy/btr5RSJiRhm/EmFg00hlYU0lx4Cqs2sFE1/img.png)
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 |