Я пытаюсь написать контейнерный объект с TypeScript, который является очень динамичным.
class Dynamic
{
//Any data can be assigon
Assign<T extends object>(obj: T) { Object.assign(this, obj); }
//And this object can be use as any type with a dispossable pattern
UsingAs<T>(proc: (as: T)=>any):any
{
let proto=Object.getPrototypeOf(T);//Can't do this
let as:T= Object.setPrototypeOf(this,proto);
let ret=proc(as);
Object.setPrototypeOf(this,Dynamic.prototype);
return ret;
}
}
Но Object.getPrototypeOf () для универсального типа невозможен. Единственный обходной путь - передать объект типа T и извлечь из него прототип, который включает создание новых объектов. Есть ли лучшее решение для этого?
кстати, вот моя работа вокруг
class Dynamic2
{
//Any data can be assigon
Assign<T extends object>(obj: T) { Object.assign(this, obj); }
//and this object can be use as any type with a dispossable pattern
UsingAs<T>(ref:T,proc: (as: T)=>any):any //passin a reference object
{
let proto=Object.getPrototypeOf(ref);//get prototype from there
let as:T= Object.setPrototypeOf(this,proto);
let ret=proc(as);
Object.setPrototypeOf(this,Dynamic.prototype);
return ret;
}
}