TypeScript·

XXX - Equal

  • #TypeScript
  • #Type Challenges

질문

두 타입이 완전히 동일한지 비교하는 Equal<A, B> 타입을 구현하세요.

예시:

1
type A = Equal<1, 1> // true
2
type B = Equal<1, number> // false
3
type C = Equal<true, boolean> // false
4
type D = Equal<{ a: number }, { a: number }> // true
5
type E = Equal<{ a: number }, { readonly a: number }> // false
6
7

선행 지식

  1. extends할당(대입) 가능성을 검사한다.

    1
    any extends string ? true : false // true
    2
    string extends any ? true : false // true

    흔히 TypeScript의 타입 시스템은 집합에 비유되곤 하지만, (*에 대하여) any라는 특수 케이스 때문에 완벽히 동일하지는 않다. 따라서 A extends Btrue이고 B extends Atrue라고 이 둘이 동일하다는 동등성을 보장하지는 못한다.

풀이