UNPKG

ts-types-tools

Version:

some type tools for typescript | TS中一些方便的类型工具

61 lines (57 loc) 1.77 kB
/** * @zh 取否. * @en Not. * For boolean * @example Not<true> // false * @example Not<false> // true */ export type Not<T extends boolean> = T extends true ? false : true; /** * @zh 或. * @en Or. * For boolean * @usage Or<boolean[]> * @usage Or<boolean, boolean> * @example Or<true, true> // true * @example Or<true, false> // true * @example Or<false, true> // true * @example Or<false, false> // false * @example Or<[true, true, true]> // true * @example Or<[false, true, false]> // true * @example Or<[false, false, false]> // false */ export type Or<A extends boolean | readonly boolean[], B extends (A extends boolean ? boolean : never) = never> = A extends boolean ? B extends boolean ? A extends true ? true : B extends true ? true : false : A : A extends [] ? B : A extends [ infer F extends boolean, ...infer R extends readonly boolean[] ] ? R extends [] ? F : Or<Or<R>, F> : never ; /** * @zh 与. * @en And. * For boolean * @usage And<boolean[]> * @usage And<boolean, boolean> * @example And<true, true> // true * @example And<true, false> // false * @example And<false, true> // false * @example And<false, false> // false * @example And<[true, true, true]> // true * @example And<[false, true, false]> // false * @example And<[false, false, false]> // false */ export type And<A extends boolean | readonly boolean[], B extends (A extends boolean ? boolean : never) = never> = A extends boolean ? B extends boolean ? A extends false ? false : B extends false ? false : true : A : A extends [] ? B : A extends [ infer F extends boolean, ...infer R extends readonly boolean[] ] ? R extends [] ? F : And<And<R>, F> : never ;