【发布时间】:2021-03-19 12:53:03
【问题描述】:
我需要从模板对象加载一些小部件(以后可能是 json)。这是一个例子:
type RectangleTemplate = {
name: 'Rectangle';
props: {
width: number;
height: number;
}
};
type ButtonTemplate = {
name: 'Button';
props: {
text: string;
}
};
type Template = ButtonTemplate | RectangleTemplate;
class Button {
constructor(template: ButtonTemplate) {
console.log(template.name);
}
}
class Rectangle {
constructor(template: RectangleTemplate) {
console.log(template.name);
}
}
const widgets = { Button, Rectangle }
const createWidget = (template: Template): void => {
const ctor = widgets[template.name as keyof typeof widgets];
const node = new ctor(template as any);
};
const template: Template = {
name: 'Button',
props: {
text: 'button'
}
}
const widget = createWidget(template);
问题出在这一行:const node = new ctor(template as any);。我无法将 template: Template 之类的参数传递给构造函数,并强制将其强制转换为 any。无法弄清楚如何正确地做到这一点。
ts playground link
【问题讨论】:
标签: javascript typescript types casting