그러면 두 타입이 다를 때 Equal2<X, Y> 타입이 false가 된다는 것만 확인하면 됩니다. X를 string, Y를 any라고 해봅시다. 이제 T에 여러 타입을 넣어서 하나라도 false가 나오는지 확인합니다. 하나만 false여도 (<T>() => T extends string ? 1 : 2) 타입을 (<T>() => T extends any ? 1 : 2) 대입할 수 없기 때문입니다. 여기서는 T가 number일 때 false가 됩니다.
이처럼 X, Y가 서로 다른 경우에는 대부분 쉽게 Equal2<X, Y>를 false로 만드는 T를 찾을 수 있습니다. 다양한 사례를 표로 정리해보았습니다. 언제나 extends를 false로 만드는 T가 있습니다.
▼ 표 2-3 반례 T를 찾을 수 있습니다
X |
Y |
T |
(<T>() => T extends X ? 1 : 2) |
(<T>() => T extends Y ? 1 : 2) |
extends |
string |
any |
number |
2 |
1 |
false |
any |
string |
number |
1 |
2 |
false |
1 |
number |
2 |
2 |
1 |
false |