Equals<X, Y>Determines if two types are exactly equal at the type level.
When to use
Use to assert type equality in conditional types or type-level tests.
Details
- Uses the
<T>() => T extends X ? 1 : 2trick for exact equality, distinguishing betweenany,unknown,never, and other types. - Resolves to
trueifXandYare identical,falseotherwise.
Example (Checking type equality)
import type { Types } from "effect"
type Yes = Types.Equals<{ a: number }, { a: number }> // true
type No = Types.Equals<{ a: number }, { a: string }> // false
type AnyCheck = Types.Equals<any, string> // falsemodelsEqualsWith
Source effect/Types.ts:2824 lines
export type type Equals<X, Y> = (<T>() => T extends X
? 1
: 2) extends <T>() => T extends Y ? 1 : 2
? true
: false
Determines if two types are exactly equal at the type level.
When to use
Use to assert type equality in conditional types or type-level tests.
Details
- Uses the
<T>() => T extends X ? 1 : 2 trick for exact equality,
distinguishing between any, unknown, never, and other types.
- Resolves to
true if X and Y are identical, false otherwise.
Example (Checking type equality)
import type { Types } from "effect"
type Yes = Types.Equals<{ a: number }, { a: number }> // true
type No = Types.Equals<{ a: number }, { a: string }> // false
type AnyCheck = Types.Equals<any, string> // false
Equals<function (type parameter) X in type Equals<X, Y>X, function (type parameter) Y in type Equals<X, Y>Y> = (<function (type parameter) T in <T>(): T extends X ? 1 : 2T>() => function (type parameter) T in <T>(): T extends X ? 1 : 2T extends function (type parameter) X in type Equals<X, Y>X ? 1 : 2) extends <
function (type parameter) T in <T>(): T extends Y ? 1 : 2T
>() => function (type parameter) T in <T>(): T extends Y ? 1 : 2T extends function (type parameter) Y in type Equals<X, Y>Y ? 1 : 2 ? true
: falseReferenced by 2 symbols