javascript - Typescript skapa ett objekt av en typ som kommer från en variabel
En metod returnerar en klaskategori åt mig: Widget.
Jag vill skapa ett objekt av denna typ med följande kod:
const wType = def.getWidgetType(); // returns Widget as type
const obj = new wType('foo'); // use the const like a normal type with parameters
getWidgetType()
public getWidgetType(): any {
return TextWidget;
}
Fel
error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.Finns det en "trevlig" version (utan eval) för att skapa ett objekt med en given klasser typ?
Svar #1
Förutsatt att det getWidgetType returnerar är en konstruktör, kan du anropa new wType('foo') förutsatt att signaturen för getWidgetType uttryckligen anger att den returnerar en konstruktörssignatur.
Till exempel skulle den här koden vara giltig:
class Definition<T> {
// Takes in a constructor
constructor(public ctor: new (p: string) => T) {
}
// returns a constructor (aka a function that can be used with the new operator)
// return type annotation could be inferred here, was added for demonstrative purposes
getWidgetType() : new (p: string) => T{
return this.ctor;
}
}
const def = new Definition(class {
constructor(p: string) {}
});
const wType = def.getWidgetType();
const obj = new wType('foo')
