type RemoveElement = Arr extends [infer Head, ...infer Tail extends number[]] ? Head extends Ele ? RemoveElement : [Head, ...RemoveElement] : []; export type Result1 = RemoveElement<[3, 2, 2, 3], 3>; // ^? export type Result2 = RemoveElement<[0, 1, 2, 2, 3, 0, 4, 2], 2>; // ^?