더북(TheBook)

Equal

두 타입이 동일하다는 것을 판단하는 방법도 알아보겠습니다. 타입도 집합이므로 AB의 부분집합이고 BA의 부분집합이면, 집합 AB가 서로 동일하다는 뜻이겠죠? 이를 곧이곧대로 코드로 나타내면 다음과 같습니다.

type Equal<A, B> = A extends B ? B extends A ? true : false : false;

이 코드에는 허점이 있습니다. 다음 예제들은 true가 될 것으로 예상했으나 그렇지 않은 사례들입니다.

type R1 = Equal<boolean, true | false>;
// type R1 = boolean
type R2 = Equal<never, never>;
// type R2 = never

이유는 이전 장에서 배웠습니다. boolean이나 never는 유니언이므로 분배법칙이 발생하기 때문입니다. 따라서 분배법칙이 일어나지 않게 바꾸면 됩니다.

type Equal<A, B> = [A] extends [B] ? [B] extends [A] ? true : false : false;
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.