rambdax
Version:
Extended version of Rambda - a lightweight, faster alternative to Ramda
41 lines (39 loc) • 1.42 kB
text/typescript
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]