Чтобы скопировать все дескрипторы исходного класса в новый расширенный класс, мне нужно создать экземпляр переменной и назначить ему расширенный класс - без указания имени классу.
Затем l oop в исходный дескриптор класса и вернуть варибал.
function my_decorator<T extends {new (...constr_args:any[]):any}>(constr_func: T){
const ExtClass = class extends constr_func {
constructor(...args: any[]){
// DO STUFF
super(...args);
// DO STUFF
}
}
for(const property_name of Object.getOwnPropertyNames(constr_func)) {
const descr = Object.getOwnPropertyDescriptor(constr_func, property_name)!;
if(property_name != 'prototype')
Object.defineProperty(ExtClass, property_name, descr);
}
return ExtClass;
}