После перехода на Angular 5.2.3 и запуска ng cli
с правилом линтера "deprecation": true
во многих моих тестах я получаю следующую ошибку:
get is deprecated: from v4.0.0 use Type<T> or InjectionToken<T>
Жалоба похожа на
fixture.debugElement.injector.get(MyService)
с классом MyService
, используемым для внедрения зависимостей.
Я затрудняюсь догадаться, каким должен быть новый синтаксис, так как
fixture.debugElement.injector.get<MyService>(MyService)
выдает ошибку компиляции, которая Argument of type 'typeof MyService' is not assignable to parameter of type 'Type<MyService> | InjectionToken<MyService>'.
Как правильно использовать инжектор, чтобы избежать ошибок устаревания?
Изменение: см. ответ ниже, для обновления Angular9.
Редактировать: Кажется, это связано с MyService, являющимся абстрактным классом. Если я использую неабстрактный класс, синтаксис .get<T>(T)
работает.
Редактировать: Исправление, по-видимому, в ожидании некоторой работы PR - https://github.com/angular/angular/pull/25222