type FilterOut<T extends any[], F> = T extends [infer E, ...infer Rest]
? [F] extends [E]
? FilterOut<Rest, F>
: [E, ...FilterOut<Rest, F>]
: [];
type FilterOut2<T extends any[], F> = T extends [infer E, ...infer Rest]
? [E] extends [F]
? FilterOut<Rest, F>
: [E, ...FilterOut<Rest, F>]
: [];
type Test = FilterOut<["a", never], never>;
//Output []
type Test2 = FilterOut2<["a", never], never>;
//Output ["a"]
It’s different Output
playground
I had lookup typescript’s document about conditional type , but not get the reason。
So, Why [E] extends [F]
and [F] extends [E]
do not have same effect in this case?