Модуль 13 · Урок 50

Object types, unions і narrowing

TypeScript structural model описує required/optional/readonly shape. Union дозволяє кілька можливих states, а control-flow narrowing доводить, який variant доступний у конкретній branch.

type / interfaceUnionDiscriminantnever

Domain states замість Boolean soup

type LoadState =
  | { status: 'idle' }
  | { status: 'loading' }
  | { status: 'success'; books: readonly Book[] }
  | { status: 'error'; message: string };

Literal discriminant звужує state. Exhaustive never check сигналізує при новому variant. Type alias може назвати union або object; interface зручний для extendable object contract. Compatibility structural: однаковий shape сумісний незалежно від назви.

Narrowing і absence

typeofPrimitive branch.
Array.isArrayArray brand.
in/equalityProperty або literal.
DiscriminantState variant.

Optional property читається як value або undefined; перевірте absence до use. ?. і ?? скорочують код після domain decision. as assertion не перевіряє runtime value, non-null ! переносить ризик на автора.

Практика

Заповніть narrowing cases і додайте новий state variant: strict check має змусити оновити exhaustive switch. Не замінюйте fix double assertion.

Офіційні джерела

Практична перевірка · урок 50 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що означає optional property x?
2. Що робить readonly?
3. Яка compatibility у TypeScript основна?