UNPKG

type-plus

Version:
21 lines (18 loc) 732 B
import type { IsEqual } from '../equal/equal.js' export type DropMatch<A extends Readonly<Array<unknown>>, Criteria> = A['length'] extends 0 ? // empty tuple A : A extends readonly [infer Head, ...infer Tail] ? Tail['length'] extends 0 ? // single element tuple undefined extends Criteria ? DropMatch.ExcludeUnionOfEmptyTuple<Head extends Criteria ? [] : [Head]> : DropMatch.ExcludeUnionOfEmptyTuple<Head extends Criteria ? [] : [Head]> : // multiple elements Exclude<Head, Criteria> extends never ? DropMatch<Tail, Criteria> : [Exclude<Head, Criteria>, ...DropMatch<Tail, Criteria>] : never[] export namespace DropMatch { export type ExcludeUnionOfEmptyTuple<A> = IsEqual<A, []> extends true ? A : Exclude<A, []> }