TypeError: Конструктор класса DefaultValueAccessor не может быть вызван без 'new' - PullRequest
0 голосов
/ 19 ноября 2018

Существует несколько библиотек Angular третьей части, которые предоставляют директивы , которые внутренне расширяют класс DefaultValueAccessor .

Когда они импортируются в проекты, у которых есть цель компиляции TypeScriptпри установке es6 они перестают работать и выдают ошибку:

TypeError: Конструктор класса DefaultValueAccessor не может быть вызван без 'new'

примеров различных библиотек, затронутыхэта проблема:

В качестве обходного пути можно скопировать исходный код библиотеки внутри моего собственного проекта (вместо импорта библиотеки как зависимости npm).Однако это не очень удобно и не очень удобно по понятным причинам.

Как правильно решить эту проблему в библиотеке?

1 Ответ

0 голосов
/ 25 ноября 2018

Я решил создать класс implements ControlValueAccessor вместо extends DefaultValueAccessor.

В результате этого мне также пришлось реализовать отсутствующие методы, поэтому я добавил следующее:

import { ControlValueAccessor } from "@angular/forms";
// ...

export class MyClass implements ControlValueAccessor {

  // ...

  onChange = (_: any) => {};
  onTouched = () => {};

  // ...

  registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
  registerOnTouched(fn: () => void): void { this.onTouched = fn; }

  setDisabledState(isDisabled: boolean): void {
    this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
  }
}

Обратите внимание, что setDisabledState не является обязательным (ControlValueAccessor не заставит вас применять его, но вам это нужно для того, чтобы поддерживать правильное состояние disabled вашего элемента управления.

...