Verwijzen naar de constructorfunctie

stemmen
14

Im af hoe ik een verwijzing naar een soort constructeur kan krijgen om de functie te passeren als een waarde. In principe wil ik een algemeen type register die het mogelijk maken gevallen worden gemaakt door te bellen naar een lid functie van een algemeen type register hebben bijvoorbeeld.

Bijvoorbeeld:

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

Later:

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

Iedereen weet of het mogelijk is om een ​​klassen constructorfunctie verwijzen?

De vraag is gesteld op 08/10/2012 om 19:17
bron van user
In andere talen...                            


2 antwoorden

stemmen
18

U kunt de constructor soort letterlijke of een objecttype letterlijke met een construct ondertekening aan het type van een constructor beschreven (zie in het algemeen punt 3.5 van de taal spec). Om uw voorbeeld te gebruiken, moet de volgende werkzaamheden:

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

Let op de aannemer soort letterlijke in GenometryTypeInfo de aannemer parameter lijst en de nieuwe oproep bij de uitvoering van CreateInstance.

antwoordde op 08/10/2012 om 19:27
bron van user

stemmen
6

typeof YourClassgeeft u aannemer het type dat gebruikt kan worden in type annotaties.

YourClassen this.constructoris constructeur zelf. Dus, deze code compileert:

class A {}

const B : typeof A = A;

this.constructor wordt niet herkend als de waarde van de constructeur het type door typoscript (dat is grappig), dus in situaties als die je nodig hebt om een ​​aantal vreemdgaan gebruiken gieten het niet any

new (<any> this.constructor)()

Dat is het.

antwoordde op 30/06/2016 om 19:40
bron van user

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