intermediate
Narrowing и type guards
Control flow, type predicates, assertion functions, typeof, in, instanceof и custom validation.
Narrowing уточняет broad type через control flow. `typeof`, `instanceof`, `in`, equality checks, type predicates и assertion functions помогают compiler понять, что safe. Runtime validation всё ещё нужна на trust boundaries.
function isUser(value: unknown): value is User {
return typeof value === 'object' && value !== null &&
'id' in value && typeof (value as User).id === 'string';
}
Начинайте external data с `unknown`, не с `any`. Нечестный type predicate может обмануть compiler. Проверка только `typeof value === 'object'` недостаточна для nested API payloads.
На интервью: объясняйте на конкретном примере и называйте, что проверяют в production code.
Типовые ошибки: путать похожие API и забывать edge cases в live coding.
Компромисс часто между ясностью и безопасностью или expressiveness и maintainability. Чеклист:
- External data как unknown.
- Честные predicates.
- Валидация nested shapes.