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