Skip to content

Commit

Permalink
chore : implementation of Filter types
Browse files Browse the repository at this point in the history
  • Loading branch information
kakasoo committed Jan 19, 2024
1 parent fd1bb58 commit 2c7acc6
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions src/types/array.type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,24 @@ import { Equal, ObjectType } from './object.type';
import { Primitive, ReadonlyOrNot } from './primitive.type';

export namespace ArrayType {
export type _FilterNull<AllowNull extends boolean, Target> = [
...(AllowNull extends false ? (Equal<Target, null> extends true ? [] : [Target]) : [Target]),
];

export type _FilterUndefined<AllowUndefined extends boolean, Target> = [
...(AllowUndefined extends false ? (Equal<Target, undefined> extends true ? [] : [Target]) : [Target]),
];
export type _FilterNull<AllowNull extends boolean, Target> = AllowNull extends false
? Equal<Target, null> extends true
? never
: Target
: Target;

export type _FilterUndefined<AllowUndefined extends boolean, Target> = AllowUndefined extends false
? Equal<Target, undefined> extends true
? never
: Target
: Target;

export type Filter<
T extends ReadonlyOrNot<any[]>,
AllowNull extends boolean,
AllowUndefined extends boolean,
> = T extends [infer First, ...infer Rest]
? [..._FilterNull<AllowNull, First>, Filter<Rest, AllowNull, AllowUndefined>]
? [_FilterUndefined<AllowUndefined, _FilterNull<AllowNull, First>>, ...Filter<Rest, AllowNull, AllowUndefined>]
: [];

/**
Expand Down

0 comments on commit 2c7acc6

Please sign in to comment.