생각보다 상당히 복잡합니다. IsArray<T>를 T extends unknown[] ? true : false로 작성했다면 반례를 생각하지 않은 것입니다. T가 never, any, readonly [] 타입일 때는 false가 되지 않습니다. IsArray<T> 타입이 복잡한 건 다음 이유 때문입니다.
• IsArray<never>가 never가 되는 것을 막기 위해 IsNever<T> extends true가 필요
• IsArray<any>가 boolean이 되는 것을 막기 위해 IsAny<T> extends true가 필요
• IsArray<readonly []>가 false가 되는 것을 막기 위해 T extends readonly unknown[]이 필요