@fp51/foldable-helpers
Advanced tools
Comparing version 1.0.0-canary-479deeaf073cdab051189d4c65565704683e48e4-1623896105555 to 1.0.0-canary-4bd3b9984e8f829f6d66fe81b62e123c9afee4d2-1624846316571
import { Guard } from './types'; | ||
declare type NotGuard<A, B extends A> = (a: A) => a is Exclude<A, B>; | ||
declare type GuardedType<Type> = Type extends (x: any) => x is infer T ? T : never; | ||
/** | ||
* Takes an array of guard parameters (so should have only one item) | ||
* and return the first parameter converted to an intersection. | ||
* | ||
* @example | ||
type Guards = ... // some guards | ||
type GuardsParameters = Parameters\<Guards[number]\>; | ||
type IntersectionOfInputTypes = InputParametersToIntersection<GuardsParameters>; | ||
* | ||
*/ | ||
declare type InputParametersToIntersection<Params> = (Params extends [any] ? (k: Params[0]) => void : never) extends (k: infer I) => void ? I : never; | ||
export declare function not<A, B extends A>(guard: Guard<A, B>): NotGuard<A, B>; | ||
export declare function and<Guards extends Guard<any, any>[]>(...guards: Guards): (t: ((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) => t is (((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) & (((Guards[number] extends (x: any) => x is infer T ? T : never) extends any ? (k: Guards[number] extends (x: any) => x is infer T ? T : never) => void : never) extends (k: infer I_1) => void ? I_1 : never); | ||
export declare function or<Guards extends Guard<any, any>[]>(...guards: Guards): (t: ((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) => t is (((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) & (Guards[number] extends (x: any) => x is infer T ? T : never); | ||
export declare function and<Guards extends Guard<any, any>[]>(...guards: Guards): (t: InputParametersToIntersection<Parameters<Guards[number]>>) => t is InputParametersToIntersection<Parameters<Guards[number]>> & ((GuardedType<Guards[number]> extends any ? (k: GuardedType<Guards[number]>) => void : never) extends (k: infer I) => void ? I : never); | ||
export declare function or<Guards extends Guard<any, any>[]>(...guards: Guards): (t: InputParametersToIntersection<Parameters<Guards[number]>>) => t is InputParametersToIntersection<Parameters<Guards[number]>> & GuardedType<Guards[number]>; | ||
export {}; |
import { Guard } from './types'; | ||
declare type NotGuard<A, B extends A> = (a: A) => a is Exclude<A, B>; | ||
declare type GuardedType<Type> = Type extends (x: any) => x is infer T ? T : never; | ||
/** | ||
* Takes an array of guard parameters (so should have only one item) | ||
* and return the first parameter converted to an intersection. | ||
* | ||
* @example | ||
type Guards = ... // some guards | ||
type GuardsParameters = Parameters\<Guards[number]\>; | ||
type IntersectionOfInputTypes = InputParametersToIntersection<GuardsParameters>; | ||
* | ||
*/ | ||
declare type InputParametersToIntersection<Params> = (Params extends [any] ? (k: Params[0]) => void : never) extends (k: infer I) => void ? I : never; | ||
export declare function not<A, B extends A>(guard: Guard<A, B>): NotGuard<A, B>; | ||
export declare function and<Guards extends Guard<any, any>[]>(...guards: Guards): (t: ((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) => t is (((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) & (((Guards[number] extends (x: any) => x is infer T ? T : never) extends any ? (k: Guards[number] extends (x: any) => x is infer T ? T : never) => void : never) extends (k: infer I_1) => void ? I_1 : never); | ||
export declare function or<Guards extends Guard<any, any>[]>(...guards: Guards): (t: ((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) => t is (((Guards[number] extends (...args: infer P) => any ? P : never) extends [any] ? (k: ([any] & (Guards[number] extends (...args: infer P) => any ? P : never))[0]) => void : never) extends (k: infer I) => void ? I : never) & (Guards[number] extends (x: any) => x is infer T ? T : never); | ||
export declare function and<Guards extends Guard<any, any>[]>(...guards: Guards): (t: InputParametersToIntersection<Parameters<Guards[number]>>) => t is InputParametersToIntersection<Parameters<Guards[number]>> & ((GuardedType<Guards[number]> extends any ? (k: GuardedType<Guards[number]>) => void : never) extends (k: infer I) => void ? I : never); | ||
export declare function or<Guards extends Guard<any, any>[]>(...guards: Guards): (t: InputParametersToIntersection<Parameters<Guards[number]>>) => t is InputParametersToIntersection<Parameters<Guards[number]>> & GuardedType<Guards[number]>; | ||
export {}; |
{ | ||
"name": "@fp51/foldable-helpers", | ||
"version": "1.0.0-canary-479deeaf073cdab051189d4c65565704683e48e4-1623896105555", | ||
"version": "1.0.0-canary-4bd3b9984e8f829f6d66fe81b62e123c9afee4d2-1624846316571", | ||
"description": "Typescript helpers to fold on sum types", | ||
@@ -47,3 +47,3 @@ "main": "dist/index.js", | ||
"tslib": "^2.1.0", | ||
"typedoc": "^0.20.28", | ||
"typedoc": "^0.21.0", | ||
"typescript": "^4.0.5" | ||
@@ -50,0 +50,0 @@ }, |
114
18404