嗨,团队即时通讯有一个非常小的问题,我有这段代码:
constructor(private mapper: any, private applyCallback: (arg0: INode) => void) {
super()
/** @type {GanttMapper} */
this.mapper = new GanttMapper(datamodel);
/** @type {function(INode):void} */
this.applyCallback = applyCallback;
// create the dummy node
this.dummyNode = new SimpleNode();
// switch off the default template
//type RouterClass = typeof ;
//interface RouterDerived extends RouterClass { }
console.log("routerClass");
this.template = new IVisualTemplate({
createVisual() {
return null;
},
updateVisual() {
return null;
}
});}
但在部分中:
this.template = new IVisualTemplate({
createVisual() {
return null;
},
updateVisual() {
return null;
}
});
我有一个错误,错误是这样的:无法创建abstrac类的实例
在JS中,此代码可以正常工作,但是我试图以有角度的方式迁移它,因此无法正常工作。
我读了同样问题的另一部分,但我无法解决......
我尝试重播所有提示,但不起作用。
谢谢大家
最佳答案
这是因为Angular(或更确切地说是TypeScript)比JavaScript更严格。您可以在JavaScript中完成一些无法在TypeScript定义文件中正确表达的事情,而又不会削弱类型检查。
这就是其中之一。它可以在运行时运行,但是TypeScript编译器不了解此功能,并警告您不要使用该无法识别的构造。
这是yFiles类库所独有的功能,称为quick interface implementation。
documentation还指出:
TypeScript中的快速界面实现
TypeScript .d.ts文件不包含允许快速实现界面的类型。它们仍然可以在运行时运行,但是TypeScript编译器仍然会产生错误。要变通解决此问题,您可以告诉编译器忽略有问题的行,或使用该接口的匿名实现:
// @ts-ignore
const customHitTestable = new IHitTestable((context, location) => location.x > 25)
const customVisualCreator = new class extends BaseClass<IVisualCreator>(IVisualCreator) implements IVisualCreator {
createVisual(context: IRenderContext): Visual {
return new SvgVisual(document.createElementNS("http://www.w3.org/2000/svg", "g"))
}
updateVisual(context: IRenderContext, oldVisual: Visual): Visual {
return oldVisual
}
}
关于javascript - 无法在angular中创建抽象类的实例,但在JS中工作正常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59068011/