Ответ
Union (|) объединяет типы, позволяя переменной быть одним из указанных типов. Например, string | number означает, что значение может быть либо строкой, либо числом.
Intersection (&) комбинирует типы, создавая новый тип, который включает все свойства из каждого типа. Например, { name: string } & { age: number } создаст тип { name: string; age: number }.
Пример:
type A = { a: number };
type B = { b: string };
// Union: может быть либо A, либо B
let union: A | B = { a: 1 }; // OK
union = { b: 'test' }; // OK
// Intersection: должен содержать и A, и B
let intersection: A & B = { a: 1, b: 'test' }; // OK