Búsqueda de sitios web

TypeScript: No se puede usar 'new' con una expresión cuyo tipo carece de una firma de llamada o de construcción


Tengo una función que instancia un objeto con un constructor dado, pasando cualquier argumento.

function instantiate(ctor:Function):any {
    switch (arguments.length) {
        case 1:
            return new ctor();
        case 2:
            return new ctor(arguments[1]);
        case 3:
            return new ctor(arguments[1], arguments[2]);
        ...
        default:
            throw new Error('"instantiate" called with too many arguments.');
    }
}

Se utiliza así:

export class Thing {
    constructor() { ... }
}

var thing = instantiate(Thing);

Esto funciona, pero el compilador se queja de cada instancia de new ctor, diciendo No se puede usar 'new' con una expresión cuyo tipo carece de una firma de llamada o de construcción.. ¿Qué tipo debería tener ctor?

Respuesta #1

Lo escribiría de esta manera (con genéricos como un extra):

function instantiate<T>(ctor: { new(...args: any[]): T }): T {

Artículos relacionados