# 19749-IsEqual

# 题目描述

实现一个 IsEqual<X, Y>,判断两个类型是否严格相等。

type T1 = IsEqual<1, 1>; // true
type T2 = IsEqual<1, 2>; // false
type T3 = IsEqual<any, 1>; // false
type T4 = IsEqual<never, never>; // true

# 分析

这就是"判断两个类型相等"的经典问题。本文档 判断两个类型相等 有详尽讨论,核心结论是采用官方终极版:

type Equals<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y
  ? 1
  : 2
  ? true
  : false;

能覆盖 never / any / 联合 / 修饰符等边界场景。

# 题解

type IsEqual<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y
  ? 1
  : 2
  ? true
  : false;

# 验证

type R1 = IsEqual<1, 1>; // true
type R2 = IsEqual<1, 2>; // false
type R3 = IsEqual<any, 1>; // false
type R4 = IsEqual<never, never>; // true
type R5 = IsEqual<{ a: 1 }, { a: 1 }>; // true
type R6 = IsEqual<[1, 2], [1, 2]>; // true

具体原理参看 判断两个类型相等,不再赘述。

Last Updated: 2026/4/19 00:27:20