@fp51/foldable-helpers
Advanced tools
Comparing version 1.0.0-canary-f790ad7d9a86b6cb691bab91ad8eae0d0283cf9c-1620094095372 to 1.0.0-canary-f9a8dd7c8070bb3ffc0fd6f1924b0a1d44842614-1624846662812
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-f790ad7d9a86b6cb691bab91ad8eae0d0283cf9c-1620094095372", | ||
"version": "1.0.0-canary-f9a8dd7c8070bb3ffc0fd6f1924b0a1d44842614-1624846662812", | ||
"description": "Typescript helpers to fold on sum types", | ||
@@ -35,4 +35,4 @@ "main": "dist/index.js", | ||
"@fp51/eslint-config-jest": "^1.0.0", | ||
"@rollup/plugin-commonjs": "^18.0.0", | ||
"@rollup/plugin-node-resolve": "^11.1.0", | ||
"@rollup/plugin-commonjs": "^19.0.0", | ||
"@rollup/plugin-node-resolve": "^13.0.0", | ||
"@types/jest": "^26.0.20", | ||
@@ -46,5 +46,5 @@ "eslint": "^7.18.0", | ||
"ts-jest": "^26.4.4", | ||
"tsd": "^0.14.0", | ||
"tsd": "^0.17.0", | ||
"tslib": "^2.1.0", | ||
"typedoc": "^0.20.28", | ||
"typedoc": "^0.21.0", | ||
"typescript": "^4.0.5" | ||
@@ -51,0 +51,0 @@ }, |
114
18404