Referanse konstruktøren funksjon

stemmer
15

Im lurer på hvordan jeg kan få en referanse til en type konstruktør å passere fungere som en verdi. I utgangspunktet, jeg vil gjerne ha en generisk type register som ville tillate tilfeller å være skapt ved å ringe et medlem funksjon av en generisk type register eksempel.

For eksempel:

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

Seinere:

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

Noen som vet om det er mulig å referere til en kurs konstruktør funksjon?

Publisert på 08/10/2012 klokken 18:17
kilden bruker
På andre språk...                            


2 svar

stemmer
19

Du kan bruke konstruktøren typen bokstavelig eller en objekttype bokstavelig med en konstruksjon signatur for å beskrive den typen en konstruktør (se generelt punkt 3.5 av språket spec). For å bruke ditt eksempel, bør følgende arbeide:

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

Legg merke til konstruktøren typen bokstavelig i GenometryTypeInfo konstruktør parameterlisten, og den nye samtalen i gjennomføringen av CreateInstance.

Svarte 08/10/2012 kl. 18:27
kilden bruker

stemmer
7

typeof YourClassgir deg konstruktør typen som kan brukes i typen kommentarer.

YourClassog this.constructorer konstruktør selv. Så, kompilerer denne koden:

class A {}

const B : typeof A = A;

this.constructor gjenkjennes ikke som verdien av konstruktøren type ved Loggfila (som er morsomt), så i situasjoner som det du trenger å bruke noen juks kaster det ingen any

new (<any> this.constructor)()

Det er det.

Svarte 30/06/2016 kl. 19:40
kilden bruker

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