type-plus
Version:
Provides additional types for TypeScript.
17 lines (15 loc) • 534 B
text/typescript
import type { NonNull } from '../utils/NonNull.js'
import type { NonUndefined } from '../utils/NonUndefined.js'
export type DropMatch<A extends Readonly<Array<unknown>>, Criteria> = A[0] extends Criteria
? never[]
: (undefined extends Criteria
? (null extends Criteria
? Array<NonNullable<A[0]>>
: Array<NonUndefined<A[0]>>)
: (null extends Criteria
? Array<NonNull<A[0]>>
: (Criteria extends A[0]
? Array<Exclude<A[0], Criteria>>
: (A[0] extends Criteria
? A
: Array<Exclude<A[0], Criteria>>))))