Напиши тип Middle Объединения и сужение обновлено

keyof от объединения объектов

Вопрос

Какой тип получится? Впишите тип.

type A = { a: 1; b: 2 };
type B = { a: 3; c: 4 };
type K = keyof (A | B); // /* ? */

Попробуйте сами

Напишите тип, как написали бы в коде.

Показать ответ и разбор

Коротко

Правильный тип: 'a'. keyof объединения даёт только общие ключи: значение типа A B гарантированно имеет лишь a.

Правильный тип

'a'

Разбор

keyof объединения даёт только общие ключи: значение типа A | B гарантированно имеет лишь a. Для пересечения наоборот: keyof (A & B) это 'a' | 'b' | 'c'. Отсюда правило: у union можно читать только общие поля без сужения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.