T가 string | number인 경우 T extends T는 string | number extends string | number가 아니라 (string extends string | number) | (number extends string | number)가 됩니다. 이는 다음 코드에 영향을 미치는데 [U] extends [T]는 [string | number] extends [string] 또는 [string | number] extends [number]가 됩니다. U = T를 통해 U에 분배법칙이 일어나지 않은 원본 타입을 담아두었습니다. 그래서 [U] extends [T]는 false가 되어 최종적으로 IsUnion<string | number>는 true가 됩니다.
만약 T가 string이었다면 [U] extends [T]에서 [string] extends [string]이 되므로 true가 되어 버립니다. 그러면 최종적으로 IsUnion<string>은 false가 됩니다.