See these types:
type Test1<T> = [T, T];
type Test2<T> = (T extends string ? 'Something' : [T, T]);
type S1 = Test1<string>; // 'Something'
type N1 = Test1<number>; // [number, number]
type B1 = Test1<boolean>; // [boolean, boolean]
type X1 = Test1<1|2>; // [2|1, 2|1]
type S2 = Test2<string>; // 'Something'
type N2 = Test2<number>; // [number, number]
type B2 = Test2<boolean>; // [false, false] | [true, true] <---
type X2 = Test2<1|2>; // [2, 2] | [1, 1] <---
Why is B2
and X2
different from B1
and X1
and how can I get [boolean, boolean]
out of Test2<boolean>
. Typescipt 4.6.4