UNPKG

3.36 kBTypeScriptView Raw
1import type { Middleware } from 'redux';
2import type { MiddlewareArray } from './utils';
3/**
4 * return True if T is `any`, otherwise return False
5 * taken from https://github.com/joonhocho/tsdef
6 *
7 * @internal
8 */
9export declare type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;
10/**
11 * return True if T is `unknown`, otherwise return False
12 * taken from https://github.com/joonhocho/tsdef
13 *
14 * @internal
15 */
16export declare type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;
17export declare type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;
18/**
19 * @internal
20 */
21export declare type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;
22/**
23 * @internal
24 */
25export declare type IfVoid<P, True, False> = [void] extends [P] ? True : False;
26/**
27 * @internal
28 */
29export declare type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;
30/**
31 * returns True if TS version is above 3.5, False if below.
32 * uses feature detection to detect TS version >= 3.5
33 * * versions below 3.5 will return `{}` for unresolvable interference
34 * * versions above will return `unknown`
35 *
36 * @internal
37 */
38export declare type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<(<T>() => T)>, 0, 1>];
39/**
40 * @internal
41 */
42export declare type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;
43export declare type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [
44 infer Head,
45 ...infer Tail
46] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;
47declare type ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D, any> ? IsAny<D, {}, D> : {})> : Acc;
48export declare type ExtractDispatchExtensions<M> = M extends MiddlewareArray<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends Middleware[] ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;
49/**
50 * Convert a Union type `(A|B)` to an intersection type `(A&B)`
51 */
52export declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
53/**
54 * Helper type. Passes T out again, but boxes it in a way that it cannot
55 * "widen" the type by accident if it is a generic that should be inferred
56 * from elsewhere.
57 *
58 * @internal
59 */
60export declare type NoInfer<T> = [T][T extends any ? 0 : never];
61export declare type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
62export interface TypeGuard<T> {
63 (value: any): value is T;
64}
65export interface HasMatchFunction<T> {
66 match: TypeGuard<T>;
67}
68export declare const hasMatchFunction: <T>(v: Matcher<T>) => v is HasMatchFunction<T>;
69/** @public */
70export declare type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;
71/** @public */
72export declare type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;
73export {};