JavaScript-программисты обычно используют их как взаимозаменяемые, хотя между ними и есть тонкое семантическое различие, достойное упоминания: undefined означает, что нечто еще не было определено, а null показывает отсутствие значения (как если бы вы пытались вычислить значение, но сталкивались при этом с ошибкой). Это всего лишь условности, и TypeScript вас не принуждает к их соблюдению, однако будет полезным понимать разницу.
Когда вы решаете, применять или нет псевдоним типа, пользуйтесь теми же доводами, что помогают решить, выделять или нет значение в отдельную переменную.
TypeScript никогда не выводит unknown — этот тип нужно явно аннотировать (a)9.
2. Можно сравнивать значения со значениями типа unknown (b).
TypeScript может удвоить вашу продуктивность и даже устроить свидание с той милой бариста из кафе напротив.
new() — это способ структурной типизации конструктора класса в TypeScript. А для конструктора класса, который может быть расширен (с помощью extends), TypeScript требует, чтобы его аргументы были типизированы с распространением any: new(…any[]).
Таблица 5.1. Ожидаемые сигнатуры типов для различных видов функций декораторов
Декораторы — это экспериментальная возможность TypeScript, предоставляющая синтаксис для метапрограммирования с классами, методами классов, свойствами и параметрами методов. Это синтаксис, который работает посредством вызова функции для декорируемого элемента.
Она может:
• Иметь состояние (например, свойства экземпляра).
• Предоставлять только конкретные методы (не абстрактные).
• Иметь конструкторы, которые вызываются в том же порядке, в каком их классы были примешаны.