"Uncaught Error: невозможно разрешить все параметры для" ошибки времени выполнения при обновлении с Angular 4 до 5.0.1

Это хорошо в Angular 4.x, только не в Angular 5.0.1. Этот проект создан с помощью Angular CLI.

compiler.js:466 Uncaught Error: Can't resolve all parameters for RegistrationService: (?).
    at syntaxError (compiler.js:466)
    at CompileMetadataResolver._getDependenciesMetadata (compiler.js:15546)
    at CompileMetadataResolver._getTypeMetadata (compiler.js:15381)
    at CompileMetadataResolver._getInjectableMetadata (compiler.js:15361)
    at CompileMetadataResolver.getProviderMetadata (compiler.js:15721)
    at eval (compiler.js:15632)
    at Array.forEach (<anonymous>)
    at CompileMetadataResolver._getProvidersMetadata (compiler.js:15592)
    at CompileMetadataResolver.getNgModuleMetadata (compiler.js:15160)
    at CompileMetadataResolver.getNgModuleSummary (compiler.js:14998)
syntaxError @ compiler.js:466
CompileMetadataResolver._getDependenciesMetadata @ compiler.js:15546
CompileMetadataResolver._getTypeMetadata @ compiler.js:15381
CompileMetadataResolver._getInjectableMetadata @ compiler.js:15361
CompileMetadataResolver.getProviderMetadata @ compiler.js:15721
(anonymous) @ compiler.js:15632
CompileMetadataResolver._getProvidersMetadata @ compiler.js:15592
CompileMetadataResolver.getNgModuleMetadata @ compiler.js:15160
CompileMetadataResolver.getNgModuleSummary @ compiler.js:14998
(anonymous) @ compiler.js:15086
CompileMetadataResolver.getNgModuleMetadata @ compiler.js:15071
JitCompiler._loadModules @ compiler.js:33486
JitCompiler._compileModuleAndComponents @ compiler.js:33447
JitCompiler.compileModuleAsync @ compiler.js:33363
CompilerImpl.compileModuleAsync @ platform-browser-dynamic.js:230
PlatformRef.bootstrapModule @ core.js:5446
(anonymous) @ main.ts:12
../../../../../src/main.ts @ main.bundle.js:640
__webpack_require__ @ inline.bundle.js:55
1 @ main.bundle.js:670
__webpack_require__ @ inline.bundle.js:55
webpackJsonpCallback @ inline.bundle.js:26
(anonymous) @ main.bundle.js:1

Вот как выглядит конструктор:

     constructor(
    private apiHelperService: ApiHelperService
  ) {
  }

Класс имеет @Injectable()

    @Injectable()
export class ApiHelperService {

Он также правильно импортирован в модуль поставщиков.

providers: [
    AuthGuard,
    ApiHelperService,

Если я изменю это на это, то ошибка исчезнет, ​​и это сработает, но затем он захочет, чтобы вы заменили каждый конструктор во всем решении на этот синтаксис, который я не считаю корректным.

@Inject(ApiHelperService) private apiHelperService: ApiHelperService

Вот мой tsconfig.json, для которого для emitDecoratorMetadata правильно установлено значение true

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

2 ответа

Решение

В сообщении блога Angular 5 Update автор упоминает, что вместо статического инжектора они используют статический инжектор, и упоминает, что полифиллы отражений больше не нужны, но в моем случае это было так.

Если вы удалили полифиллы для отражений, попробуйте добавить их снова:

import 'core-js/es6/reflect';
import 'core-js/es7/reflect';

Я надеюсь, что это проснется и для вас.

В моем случае для миграции на Angular 6.1 это было пропущено:

import "reflect-metadata";
import "zone.js";

внутри bootфайл.

В ошибке упоминается, что вы используете конструктор wron для RegistrationService.

Другие вопросы по тегам