UNPKG

rambdax

Version:

Extended version of Rambda - a lightweight, faster alternative to Ramda

41 lines (39 loc) 1.42 kB
import {Match} from './_Internal' import {Extends} from './Extends' import {Equals} from './Equals' import {Contains} from './Contains' /** * Check whether `A` is similar to `A1` or not. In other words, it is a compact * type that bundles [[Equals]], [[Extends]], [[Contains]], comparison types. * @param A to be compared * @param A1 to compare to * @param match (?=`'default'`) to change precision * @returns [[Boolean]] * @example * ```ts * import {A} from 'ts-toolbelt' * * type test0 = A.Is<'a', 'a' | 'b', 'extends->'> // True * type test1 = A.Is<'a' | 'b', 'a', 'extends->'> // Boolean * * type test2 = A.Is<'a', 'a' | 'b', '<-extends'> // Boolean * type test3 = A.Is<'a' | 'b', 'a', '<-extends'> // True * * type test4 = A.Is<'a', 'a' | 'b', 'contains->'> // True * type test5 = A.Is<'a' | 'b', 'a', 'contains->'> // False * * type test6 = A.Is<'a', 'a' | 'b', '<-contains'> // False * type test7 = A.Is<'a' | 'b', 'a', '<-contains'> // True * * type test8 = A.Is<'a', 'a' | 'b', 'equals'> // False * type test9 = A.Is<'b' |'a', 'a' | 'b', 'equals'> // True * ``` */ export type Is<A extends any, A1 extends any, match extends Match = 'default'> = { 'default' : Extends<A, A1> 'contains->' : Contains<A, A1> 'extends->' : Extends<A, A1> '<-contains' : Contains<A1, A> '<-extends' : Extends<A1, A> 'equals' : Equals<A1, A> }[match]