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 параметр?


Ответы (0 шт):