export type OptionalPropertyNames = { [K in keyof T]-?: {} extends { [P in K]: T[K]; } ? K : never; }[keyof T]; export type SpreadProperties = { [P in K]: L[P] | Exclude; }; /** @deprecated Because it can cause https://github.com/n1ru4l/envelop/issues/1120. */ export type Id = T extends infer U ? { [K in keyof U]: U[K]; } : never; export type SpreadTwo = Pick> & Pick>> & Pick, keyof L>> & SpreadProperties & keyof L>; export type Spread = A extends [infer L, ...infer R] ? SpreadTwo> : {}; export type UnionToIntersection = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never; export type LastOf = UnionToIntersection T : never> extends () => infer R ? R : never; export type Push = [...T, V]; export type TuplifyUnion, N = [T] extends [never] ? true : false> = true extends N ? [] : Push>, L>; export type Unarray = T extends Array ? U : T; export type ArbitraryObject = Record; export { MaybePromise as PromiseOrValue } from '@whatwg-node/promise-helpers'; export type AsyncIterableIteratorOrValue = T | AsyncIterableIterator; export type Maybe = T | null | undefined; export type Optional = T | Maybe | false; export interface ObjMap { [key: string]: T; } export type ObjMapLike = ObjMap | { [key: string]: T; }; export interface ReadOnlyObjMap { readonly [key: string]: T; } export type ReadOnlyObjMapLike = ReadOnlyObjMap | { readonly [key: string]: T; };