import type { Middleware, StoreEnhancer } from 'redux'; import type { Tuple } from './utils'; export declare function safeAssign(target: T, ...args: Array>>): void; /** * return True if T is `any`, otherwise return False * taken from https://github.com/joonhocho/tsdef * * @internal */ export type IsAny = true | false extends (T extends never ? true : false) ? True : False; export type CastAny = IsAny; /** * return True if T is `unknown`, otherwise return False * taken from https://github.com/joonhocho/tsdef * * @internal */ export type IsUnknown = unknown extends T ? IsAny : False; export type FallbackIfUnknown = IsUnknown; /** * @internal */ export type IfMaybeUndefined = [undefined] extends [P] ? True : False; /** * @internal */ export type IfVoid = [void] extends [P] ? True : False; /** * @internal */ export type IsEmptyObj = T extends any ? keyof T extends never ? IsUnknown>> : False : never; /** * returns True if TS version is above 3.5, False if below. * uses feature detection to detect TS version >= 3.5 * * versions below 3.5 will return `{}` for unresolvable interference * * versions above will return `unknown` * * @internal */ export type AtLeastTS35 = [True, False][IsUnknown() => T)>, 0, 1>]; /** * @internal */ export type IsUnknownOrNonInferrable = AtLeastTS35, IsEmptyObj>>; /** * Convert a Union type `(A|B)` to an intersection type `(A&B)` */ export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type ExcludeFromTuple = T extends [ infer Head, ...infer Tail ] ? ExcludeFromTuple : Acc; type ExtractDispatchFromMiddlewareTuple = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple ? IsAny : {})> : Acc; export type ExtractDispatchExtensions = M extends Tuple ? ExtractDispatchFromMiddlewareTuple : M extends ReadonlyArray ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never; type ExtractStoreExtensionsFromEnhancerTuple = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple ? IsAny : {})> : Acc; export type ExtractStoreExtensions = E extends Tuple ? ExtractStoreExtensionsFromEnhancerTuple : E extends ReadonlyArray ? UnionToIntersection ? Ext extends {} ? IsAny : {} : {}> : never; type ExtractStateExtensionsFromEnhancerTuple = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple ? IsAny : {})> : Acc; export type ExtractStateExtensions = E extends Tuple ? ExtractStateExtensionsFromEnhancerTuple : E extends ReadonlyArray ? UnionToIntersection ? StateExt extends {} ? IsAny : {} : {}> : never; /** * Helper type. Passes T out again, but boxes it in a way that it cannot * "widen" the type by accident if it is a generic that should be inferred * from elsewhere. * * @internal */ export type NoInfer = [T][T extends any ? 0 : never]; export type NonUndefined = T extends undefined ? never : T; export type Omit = Pick>; export type WithRequiredProp = Omit & Required>; export type WithOptionalProp = Omit & Partial>; export interface TypeGuard { (value: any): value is T; } export interface HasMatchFunction { match: TypeGuard; } export declare const hasMatchFunction: (v: Matcher) => v is HasMatchFunction; /** @public */ export type Matcher = HasMatchFunction | TypeGuard; /** @public */ export type ActionFromMatcher> = M extends Matcher ? T : never; export type Id = { [K in keyof T]: T[K]; } & {}; export type Tail = T extends [any, ...infer Tail] ? Tail : never; export type UnknownIfNonSpecific = {} extends T ? unknown : T; /** * A Promise that will never reject. * @see https://github.com/reduxjs/redux-toolkit/issues/4101 */ export type SafePromise = Promise & { __linterBrands: 'SafePromise'; }; /** * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback). */ export declare function asSafePromise(promise: Promise, fallback: (error: unknown) => Rejected): SafePromise; export {};