Вам нужно посмотреть полную декларацию декоратора:
function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
return class extends constructor {
newProperty = "new property";
hello = "override";
}
}
Это довольно мрачно, но вот что происходит.
Тип constructor
- это то, что удовлетворяет параметру типа T
.
Этот параметр типа T extends {new(...args:any[]):{}}
применяется к любому объекту, у которого есть конструктор, который принимает любое количество аргументовлюбой тип (т. е. почти что угодно).
Вместо этого передается constructor
, который передается в этот декоратор, возвращается другой класс.
Обратите внимание, что синтаксис return class { ... }
- это способ вернуть анонимный класс из функции, подобно тому, как return function() { ... }
возвращает анонимную функцию.
И class extends constructor
означает, что анонимный класс наследует все методы и свойства constructor
.(конструктор - это декорируемый класс).