Тип объединения описывает значение, которое может быть одним из нескольких типов.
Посмотрите на этот пример:
class Test1 {
public a:string
}
class Test2 {
public b:string
}
class Test3 {
}
let x: (typeof Test1 | typeof Test2)[];
x = [Test1]; //ok
x = [Test1, Test2]; //ok
x = [Test3]; //compilation error
Ответ 2
Труба представляет собой "или". Таким образом, в этом контексте говорится, что любой из объявленных типов разрешен. Возможно, легко понять союз с примитивными типами:
let x: (string | number);
x = 1; //ok
x = 'myString'; //ok
x = true; //compilation error for a boolean