Type Alias Equal<A, B, $O>
Equal: [A, B] extends [B, A] ? BothNever< A, B, $ResolveBranch<$O, [$Then]>, $ResolveBranch<$O, [$Else]>, BothAny< A, B, $ResolveBranch<$O, [$Then]>, $ResolveBranch<$O, [$Else]>, $Same< A, B, { $else: [IsObject<A>, IsObject<B>] extends [true, true] ? $Same< Properties<A>, Properties<B>, { $else: $ResolveBranch<$O, [$Else]>; $then: [A, B] extends [(...args: ...
) => ...
, (...args: ...
) => ...
] ? IsEqual< P1, P2, $ResolveBranch<(...)
, (...)
>, $ResolveBranch<(...)
, (...)
>, > : $ResolveBranch<$O, [(...)
]>; }, > : [A, B] extends [B, A] ? $ResolveBranch<$O, [$Then]> : $ResolveBranch<$O, [$Else]>; $then: $ResolveBranch<$O, [$Then]>; }, >, >, > : $ResolveBranch<$O, [$Else], A>
🎭 predicate
Validate
A
andB
are "equal".Note that intersection type checks only works at first level. It cannot be check recursively, or else will run into infinite recursion if the type includes recursive types.