Odkazování na funkci konstruktoru

hlasů
14

Im přemýšlel, jak mohu získat odkaz na typy konstruktoru předat funkci jako hodnotu. V podstatě bych chtěl mít obecný registr typ, který by umožnil případy, které mají být vytvořeny voláním funkce členů instance registru typ generické.

Například:

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

Později:

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));
}

Někdo vědět, jestli je možné odkazovat funkce třídy konstruktor?

Položena 08/10/2012 v 19:17
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
18

Můžete použít typ konstruktoru doslovný nebo typ objektu doslovný s podpisem konstruktem popsat typ konstruktoru (viz obecně, oddíl 3.5 jazykové specifikace). Chcete-li používat například následující by měl fungovat:

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);
}

Všimněte si, že typ konstruktoru doslovný v konstruktoru seznamu parametrů GenometryTypeInfo je a nový hovor při provádění CreateInstance.

Odpovězeno 08/10/2012 v 19:27
zdroj uživatelem

hlasů
6

typeof YourClassvám dává konstruktoru typu , které mohou být použity v typ anotací.

YourClassa this.constructorje konstruktor sám. Takže tento kód zkompiluje:

class A {}

const B : typeof A = A;

this.constructor není rozpoznána jako hodnota typu konstruktoru ze strany strojopisu (což je legrační), tak v situacích, jako je, že budete muset použít nějaké podvádění obsadí to ne any

new (<any> this.constructor)()

A je to.

Odpovězeno 30/06/2016 v 19:40
zdroj uživatelem

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