Boolean tuple from conditional type is [false,false] | [true,true] instead of [boolean, boolean]

Viewed 21

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

0 Answers
Related