import { If } from "./if"; import { Not } from "./not"; /** * Returns a boolean whether the passed two arguments are equal * @example * ```ts * // true * type Case1 = IsEqual * // false * type Case2 = IsEqual<1, 4> * ``` */ export type IsEqual = (() => F extends T ? 1 : 2) extends < F >() => F extends U ? 1 : 2 ? true : false; /** * Returns a boolean whether the passed two arguments are not equal * @example * ```ts * // true * type Case1 = IsNotEqual<1, 4> * // false * type Case2 = IsNotEqual * ``` */ export type IsNotEqual = Not>; /** * Accepts two types and returns the third argument if the first two are equal (defaults to `true`), otherwise returns the fourth argument (defaults to `false`) * @example * ```ts * // 'valid' * type Case1 = IfEqual * // 'invalid' * type Case1 = IfEqual<1, 4, 'valid', 'invalid'> * ``` */ export type IfEqual = If< IsEqual, IfTrue, IfFalse >; /** * Accepts two types and returns the third argument if the first two are not equal (defaults to `true`), otherwise returns the fourth argument (defaults to `false`) * @example * ```ts * // 'valid' * type Case1 = IfNotEqual<1, 4, 'valid'> * // 'invalid' * type Case1 = IfNotEqual * ``` */ export type IfNotEqual = If< IsNotEqual, IfTrue, IfFalse >;