// your answers
type ToUnion<U> = U extends unknown[]? U[number]: U
type Without<T extends any[], U> = T extends [infer S,...infer R]?
S extends ToUnion<U> ?
Without<R ,U> : [S,...Without<R, U>] :[]
Solution by pea-sys #33093
type ConvertToArray<T extends unknown | unknown[]> = T extends unknown[] ? T : [T]
type Without<T extends unknown[], U> = T extends [infer H, ...infer R]
? H extends ConvertToArray<U>[number]
? Without<R, U>
: [H, ...Without<R, U>]
: T;```
Solution by keyurparalkar #32512
type ToUnion<T> = T extends any[] ? T[number] : T;
type Without<T extends number[], U extends number | number[], V extends number[] = []> = T extends [
infer First,
...infer Rest,
]
? First extends ToUnion<U>
? Without<Rest extends number[] ? Rest : never, U, [...V]>
: Without<Rest extends number[] ? Rest : never, U, [...V, First & number]>
: V;
Solution by gasmg #32233
type Without<T, U, S = U extends number[] ? U[number]:U> = T extends [infer F, ...infer Rest] ? F extends S ? Without<Rest, U, S>: [F, ...Without<Rest, U, S>]:T
Solution by Zhen-code #32025
type Without<T, U> =
T extends [infer F, ...infer R] ? F extends (U extends unknown[] ? U[number] : U) ? Without<R, U> : [F, ...Without<R, U>] : [];
Solution by preventdefault #31843
type ReturnArray<T> = T extends unknown[] ? T : [T];
type Without<T, U extends unknown[] | number> = T extends [infer F, ...infer Rest]
? F extends ReturnArray<U>[number]
? Without<Rest, U>
: [F, ...Without<Rest, U>]
: [];
Solution by leejaehyup #30848
// Removes an element from an array
type WithoutEle<TArr extends unknown[], UEle> = TArr extends []
? []
: TArr extends [infer TEle, ...infer TRest]
? Equal<TEle, UEle> extends true
? WithoutEle<TRest, UEle>
: [TEle, ...WithoutEle<TRest, UEle>]
: never;
// Removes an element or an array of elements from an array
type Without<TArr extends unknown[], U> = U extends []
? TArr
: U extends [infer UEle, ...infer URest]
? Without<WithoutEle<TArr, UEle>, URest>
: WithoutEle<TArr, U>;
Solution by olalonde #30260
type Without<
T extends any[],
U extends T[number] | T[number][],
V extends T[number] = U extends T[number][] ? U[number] : U
> =
T extends [infer F, ...infer R]
? [...(F extends V ? [] : [F]), ...Without<R, never, V>]
: []
Solution by sbr61 #30213
type Without<T extends any[], E extends any[], R extends any[] = []> = T extends [infer A, ...infer B] ?
A extends E[number] ?
Without<B, E, [...R]>:
Without<B, E, [...R, A]>:
R;
type without = Without<[1, 2, 3], [1, 2, 3]>;
const wo: without = [];
Solution by sundial-dreams #29546
// your answers
type ToUnion<U> = U extends unknown[]? U[number]: U
type Without<T , U> =
T extends [infer First , ...infer Rest] ?
First extends ToUnion<U> ?
Without<Rest ,U> :
[First , ...Without<Rest, U>]
: []
Solution by kerolossamir165 #29295
type Without<T, U> = U extends any[]
? T extends [infer Head, ...infer Tail]
? Head extends U[number]
? [...Without<Tail, U>]
: [Head, ...Without<Tail, U>]
: T
: T extends [infer Head, ...infer Tail]
? Head extends U
? [...Without<Tail, U>]
: [Head, ...Without<Tail, U>]
: T
Solution by Kying-star #29039
type ToUnion<T extends number | number[]> = T extends number[] ? T[number] : T;
type Without<T, U extends number | number[], Union = ToUnion<U>> = T extends [
infer F,
...infer Rest
]
? F extends Union
? [...Without<Rest, U, Union>]
: [F, ...Without<Rest, U, Union>]
: [];
Solution by DoubleWoodLin #28777
type Union<T> = T extends any[] ? T[number] : T
type Without<T, U> = T extends [infer First, ...infer Rest]
? First extends Union<U>
? [...Without<Rest, U>]
: [First, ...Without<Rest, U>]
: T
Solution by se030 #28316
type WithoutTuple<T, U extends number[], Result extends number[] = []> =
T extends [infer F extends number, ...infer R extends number[]]
? U extends number[]
? F extends U[number]
? WithoutTuple<R, U, Result>
: WithoutTuple<R, U, [...Result, F]>
: never
: Result
type Without<T, U> = U extends number
? WithoutTuple<T, [U]>
: U extends number[]
? WithoutTuple<T, U>
: never
Solution by jazelly #27738
type ItIsT<T, F> = F extends unknown[] ? T extends F[number] ? true : false : T extends F ? true : false
type Without<T extends unknown[], F, Result extends unknown[] = []> =
T extends [infer Pre, ...infer Next]
? ItIsT<Pre, F> extends true
? Without<Next, F, Result>
: Without<Next, F, [...Result, Pre]>
: Result
Solution by jiechliu #27718
type Without<
T extends unknown[],
U,
A = Exclude<T[number], U extends unknown[] ? U[number] : U>
> = T extends [infer F, ...infer R]
? F extends A
? [F, ...Without<R, U, A>]
: Without<R, U, A>
: [];
Solution by DoGukKim #27301
type Without<T extends unknown[], U, Y = Exclude<T[number], U extends unknown[] ? U[number] : U>> =
T extends [infer F, ...infer R] ? [...(F extends Y ? [F] : []), ...Without<R, U, Y>] : T
Solution by smileboyi #27105
// 你的答案
type Without<T extends unknown[], U extends number | number[]> =
T extends [infer X, ...infer Y] ?
X extends (U extends number[] ? U[number] : U) ?
Without<Y, U> : [X, ...Without<Y, U>] :
T
Solution by kiki-zjq #25666
type _Without<T extends any[], U extends any[]> =
T extends [infer Head, ...infer Tail]
? [
...(Head extends U[number] ? [] : [Head]),
..._Without<Tail, U>
]
: []
type Without<T extends any[], U> = U extends any[]
? _Without<T, U>
: _Without<T, [U]>
Solution by prenaissance #24928
type Without<T extends unknown[], U extends number | number[]> = T extends [infer First, ...infer Rest]
? First extends ( U extends number[]
? U[number]
: U
)
? Without<Rest, U>
: [First, ...Without<Rest, U>]
: T
Solution by NeylonR #24270
// your answers
type Without<
T extends any[],
U extends any[] | any,
Res extends any[] = []
> = T extends [infer Left, ...infer Rest]
? Left extends Res[number]
? Without<Rest, U, Res>
: Left extends (U extends any[] ? U[number] : U)
? Without<Rest, U, Res>
: Without<Rest, U, [...Res, Left]>
: Res
Solution by studymachiney #24080
type Without<T extends any[], U> = U extends any[] ?
T extends [infer F, ...infer R] ? F extends U[number] ? [...Without<R, U>] : [F, ...Without<R, U>] : []/*pop*/ :
Without<T, [U]>;
// old way
// type Reduce<T extends any[], U> = T extends [infer F, ...infer R] ? (U extends F ? [...Reduce<R, U>] : [F, ...Reduce<R, U>]) : [];
// type Without<T extends any[], U> = U extends any[] ?
// (
// U extends [infer F, ...infer R] ? Without<Reduce<T, F>, R> : T
// ) :
// Without<T, [U]>;
Solution by E-uler #23983
type Includes<T extends any[], U> = T extends [infer L, ...infer Rest]
? Equal<L, U> extends true
? true
: Includes<Rest, U>
: false;
type Without<T extends number[], U extends number | number[]> = U extends number[]
? T extends [infer L extends number, ...infer Rest extends number[]]
? Includes<U, L> extends true
? Without<Rest, U>
: [L, ...Without<Rest, U>]
: []
: U extends number
? Without<T, [U]>
: [];
Solution by asurewall #23136
type NumberToUnion<T extends unknown | unknown[]> = T extends unknown[] ? T[number] : T;
type Without<
T,
U,
Acc extends unknown[] = []
> = T extends [infer First, ...infer Rest]
? First extends NumberToUnion<U>
? Without<Rest, U, Acc>
: Without<Rest, U, [...Acc, First]>
: Acc;
Solution by snakeUni #23114
type ToArray<V> = V extends [...infer _] ? V : [V]
type Without<T extends any[], U extends T[number] | T[number][]> =
T extends [infer Head, ...infer Rest] ?
Head extends ToArray<U>[number]
? [...Without<Rest, U>] : [Head, ...Without<Rest, U>]
: []
Solution by Karol-Waliszewski #23105
type InnerWithout<T, U, L extends any[] = []> = T extends [infer F, ...infer R]
? F extends U
? InnerWithout<R, U, L>
: InnerWithout<R, U, [...L, F]>
: L;
type Without<T, U> = U extends any[]
? InnerWithout<T, U[number]>
: InnerWithout<T, U>;
Solution by coderyoo1 #22882
// 你的答案
type NumberToUnion<T extends unknown | unknown[]> = T extends unknown[] ? T[number] : T;
type Without<
T,
U,
Acc extends unknown[] = []
> = T extends [infer First, ...infer Rest]
? First extends NumberToUnion<U>
? Without<Rest, U, Acc>
: Without<Rest, U, [...Acc, First]>
: Acc;
Solution by jxhhdx #22730
type Without<T extends unknown[], U, R extends unknown[] = []> =
T extends [infer A, ...infer Rest]
? A extends (U extends unknown[] ? U[number] : U)
? Without<Rest, U, R>
: Without<Rest, U, [...R, A]>
: R
Solution by drylint #21992
type Within<T, U> = U extends number[]
? U extends [infer F, ...infer Rest]
? F extends T
? true
: Within<T, Rest>
: false
: T extends U
? true
: false;
// type res = Within<1, 1>
type Without<T extends unknown, U, R extends unknown[] = []> = T extends [
infer F,
...infer Rest
]
? Within<F, U> extends false
? Without<Rest, U, [...R, F]>
: Without<Rest, U, R>
: R;
Solution by BarrySong97 #21832
type ToUnion<T> = T extends any[] ? T[number] : T
type Without<T extends any[], U> = T extends [infer F, ...infer R]
? F extends ToUnion<U>
? Without<R, U>
: [F, ...Without<R, U>]
: T
Solution by jgjgill #21623