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?