TypeScript декоратор класса
Пример:
function FooDecorator<T extends {new(...args:any[]):object}>(constr:T) {
return class extends constr{
test:string ="test"
constructor(...args:any[]){
super(...args)
}
}
}
@FooDecorator
class Foo {
static bz:string = "BZZZZ"
title:string
constructor(title:string){
this.title=title
}
}
Я не понимаю логику декоратора. У нас есть дженерик T, который означает: тип объекта, у которого конструктор принимает сколько угодно параметров и возвращает объект. Как я понимаю, это вообще любой объект.
Почему я тогда не могу написать, что хочу принимать только объекты, которые принимают 1 параметр в своем конструкторе?
function FooDecorator<T extends {new(a:string):object}>(constr:T)
Или почему я не могу написать, что конструктор объекта возвращает тип самого объекта
function FooDecorator<T extends {new(...args:any[]):T}>(constr:T)
Во многих статьях, говорят, что декоратор возвращает новый анонимный класс. В официальной документации написано, что если декоратор что то возвращает, то он заменяет декларирование класса. Почему тогда у меня конструктор анонимного класса принимает ...args[] и отдает их в super(...args), хотя конструктор родителя принимает только 1 параметр?