import { Depth } from '../Object/_Internal'; import { BuiltIn } from '../Misc/BuiltIn'; import { Has } from '../Union/Has'; import { If } from './If'; import { Key } from './Key'; /** * @hidden */ export declare type ComputeRaw = A extends Function ? A : { [K in keyof A]: A[K]; } & unknown; /** * @hidden */ declare type ComputeFlat = A extends BuiltIn ? A : A extends Array ? A extends Array> ? Array<{ [K in keyof A[number]]: A[number][K]; } & unknown> : A : A extends ReadonlyArray ? A extends ReadonlyArray> ? ReadonlyArray<{ [K in keyof A[number]]: A[number][K]; } & unknown> : A : { [K in keyof A]: A[K]; } & unknown; /** * @hidden */ declare type ComputeDeep = A extends BuiltIn ? A : If, A, (A extends Array ? A extends Array> ? Array<{ [K in keyof A[number]]: ComputeDeep; } & unknown> : A : A extends ReadonlyArray ? A extends ReadonlyArray> ? ReadonlyArray<{ [K in keyof A[number]]: ComputeDeep; } & unknown> : A : { [K in keyof A]: ComputeDeep; } & unknown)>; /** * Force TS to load a type that has not been computed (to resolve composed * types that TS haven't fully resolved, for display purposes mostly). * @param A to compute * @returns `A` * @example * ```ts * import {A} from 'ts-toolbelt' * * type test0 = A.Compute<{x: 'x'} & {y: 'y'}> // {x: 'x', y: 'y'} * ``` */ export declare type Compute = { 'flat': ComputeFlat; 'deep': ComputeDeep; }[depth]; export {};