type BoxedValue‹T› = { value: T };
type BoxedArray‹T› = { array: T[] };
type Boxed‹T›> = T extends any[] ? BoxedArray‹T[number]› : BoxedValue‹T›;

type T20 = Boxed‹string›;  // BoxedValue‹string›;
type T21 = Boxed‹number[]›;  // BoxedArray‹‹number›;
type T22 = Boxed‹string | number[]›;  // BoxedValue‹string› | BoxedArray‹number›;