Какая иерархия типов в TypeScript?
Основы TypeScript
Типы TypeScript образуют иерархию от самого широкого `unknown` до самого узкого `never`.
Уровни
- `unknown` — верхний тип: ему можно присвоить что угодно, но использовать без проверки нельзя.
- `any` — выпадает из иерархии: совместим со всем в обе стороны и отключает проверки.
- Примитивы и `object` —
string,number,boolean,bigint,symbol,null,undefined, объектные типы. - Литеральные типы — подтипы примитивов:
'ok'⊂string,42⊂number. - `never` — нижний тип: присваивается чему угодно, но ему не присвоить ничего.
let a: unknown = 'text'; // ок
let s: string = 'ok';
let lit: 'ok' = 'ok';
s = lit; // ок: литерал — подтип string
lit = s; // ошибкаОбъединения и пересечения
A | B шире каждого из вариантов, A & B — уже. Объектный тип с большим числом свойств — подтип типа с меньшим (структурная типизация).
Коротко для собеседования
Сверху unknown, снизу never, между ними примитивы, объекты и литералы; any стоит вне иерархии и отключает проверки.
Подробнее: TypeScript Handbook — Type Compatibility