Hivatkozás a kivitelező funkció

szavazat
14

Im kíváncsi, hogyan tudok egy hivatkozás egy fajta kivitelező átadni a függvény egy értéket. Alapvetően azt szeretné, hogy az általános típus adatbázis, amely lehetővé tenné, hogy az esetekben kell létrehozni meghívásával tagja funkciója általános típus registry fokon.

Például:

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return this.fnCtor(args); }
    }
}

Majd később:

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point); // <- fails
    // also fails: 
    //    new GeometryTypeInfo(1, 'POINT', new Point);
    //    new GeometryTypeInfo(1, 'POINT', Point.prototype);
    //    new GeometryTypeInfo(1, 'POINT', Point.bind(this));
}

Bárki, aki tudja, ha ez lehetséges hivatkozni egy osztályba konstruktor függvényt?

A kérdést 08/10/2012 19:17
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
18

Használhatja a kivitelező típusú literál, vagy egy objektum típusú literál olyan konstrukcióval aláírását írja le, a kivitelező (lásd általánosságban a 3.5 fejezetben a nyelvi spec). Ahhoz, hogy a például a következőket kell dolgozni:

interface IGeometry {
    x: number;
    y: number;
}

class GeometryTypeInfo
{        
    constructor (public typeId: number, public typeName: string, public fnCtor: new (...args: any[]) => IGeometry) {
    }
    createInstance(...args: any[]) : IGeometry { return new this.fnCtor(args); }
}

class Point implements IGeometry {
    constructor(public x: number, public y: number) { }

    public static type_info = new GeometryTypeInfo(1, 'POINT', Point);
}

Figyeljük meg a kivitelező típusú literál GenometryTypeInfo konstruktorának paraméter lista, és az új hívás végrehajtása során createInstance.

Válaszolt 08/10/2012 19:27
a forrás felhasználó

szavazat
6

typeof YourClassad kivitelező típusú , amely felhasználható típusú kommentárokat.

YourClassés this.constructora kivitelező is. Tehát, ezt a kódot állít össze:

class A {}

const B : typeof A = A;

this.constructor nem ismerik el értékét kivitelező típusát géppel (ami vicces), ezért az ilyen helyzetekben, hogy meg kell használni valamilyen csalás öntése nem any

new (<any> this.constructor)()

Ez az.

Válaszolt 30/06/2016 19:40
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more