Как получить прототип универсального типа? - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь написать контейнерный объект с 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;
    }
}
...