TypeScript: Kan ikke bruke 'new' med et uttrykk hvis type mangler en kall- eller konstruktorsignatur


Jeg har en funksjon som oppretter et objekt med en gitt konstruktør, og sender med eventuelle argumenter.

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

Det brukes slik:

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

var thing = instantiate(Thing);

Dette fungerer, men kompilatoren klager på hver new ctor-instans og sier Cannot use 'new' with an expression whose type lacks a call or construct signature.. Hvilken type bør ctor ha?

Svar #1

Jeg ville skrevet det på denne måten (med generics som en bonus):

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

Relaterte artikler