UNPKG

type-plus

Version:
16 lines 775 B
import type { AnyRecord } from './AnyRecord.js'; /** * Intersect type recursively. * The recursion terminates at level 7 due to design limit of TypeScript. * * Normal use case is intersecting betwee two object types. * While it works for value types and top level array, * top level array does not recursive into the elements. * NOTE: in latest TypeScript, * `undefined` is not an accepted value. * The resulting type would be `never` */ export type RecursiveIntersect<T, U> = T & (T extends Array<infer Y> ? Array<Y & U> & U : T extends AnyRecord ? { [P in keyof T]: T[P] extends Array<infer R> ? Array<RecursiveIntersect<R, U>> & U : T[P] extends AnyRecord ? RecursiveIntersect<T[P], U> : T[P] & U; } & U : U); //# sourceMappingURL=RecursiveIntersect.d.ts.map