Referencing the constructor function

typescript

Solution

You can use the constructor type literal or an object type literal with a construct signature to describe the type of a constructor (see, generally, section 3.5 of the language spec). To use your example, the following should work:

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

Notice the constructor type literal in `GeometryTypeInfo`'s constructor parameter list, and the new call in the implementation of `createInstance`.

Problem

Im wondering how I can get a reference to a types constructor to pass the function as a value. Basically, I would like to have a generic type registry that would allow instances to be created by calling a member function of a generic type registry instance. For example: ``` 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)); } ``` Anyone know if it is possible to reference a classes constructor function?

Original source