嗨,团队即时通讯有一个非常小的问题,我有这段代码:

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/

10-16 06:55