31 lines
959 B
Plaintext
31 lines
959 B
Plaintext
/**
|
|
Returns a boolean for whether the two given types are equal.
|
|
|
|
@link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
|
|
@link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796
|
|
|
|
Use-cases:
|
|
- If you want to make a conditional branch based on the result of a comparison of two types.
|
|
|
|
@example
|
|
```
|
|
import type {IsEqual} from 'type-fest';
|
|
|
|
// This type returns a boolean for whether the given array includes the given item.
|
|
// `IsEqual` is used to compare the given array at position 0 and the given item and then return true if they are equal.
|
|
type Includes<Value extends readonly any[], Item> =
|
|
Value extends readonly [Value[0], ...infer rest]
|
|
? IsEqual<Value[0], Item> extends true
|
|
? true
|
|
: Includes<rest, Item>
|
|
: false;
|
|
```
|
|
|
|
@category Utilities
|
|
*/
|
|
export type IsEqual<A, B> =
|
|
(<G>() => G extends A ? 1 : 2) extends
|
|
(<G>() => G extends B ? 1 : 2)
|
|
? true
|
|
: false;
|