Javascript ';未捕获错误:Can';t解析'的所有参数;从Angular 4升级到5.0.1时出现运行时错误

Javascript ';未捕获错误:Can';t解析'的所有参数;从Angular 4升级到5.0.1时出现运行时错误,javascript,angular,angular-cli,angular5,Javascript,Angular,Angular Cli,Angular5,这在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.j

这在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
该类具有@Injectable()

它还正确地导入到模块提供程序中

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"
    ]
  }
}

该错误提到您正在使用wron构造函数进行注册服务。

作者在文章中提到,他们使用的是静态注入器,而不是基于反射的注入器,并提到不再需要反射多边形填充,但在我的例子中,它是

如果删除了反射的多边形填充,请尝试再次添加它们:

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

我希望它也能为您工作。

在我的例子中,对于Angular 6.1迁移,它缺少一个:

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

boot
文件中。

是否将一个服务导入另一个?你是怎么做到的?您使用一个index.ts文件吗?我使用index.html文件,是的,我将服务导入其他服务。例如:构造函数(私有http:http,@Inject(LOCALE_ID)受保护的localeId:string,私有appInsightsService:appInsightsService,私有apiHelperService:apiHelperService){}我问了,因为我有类似的问题。我有一个包含index.ts文件的服务目录。此文件类似于->从“/employee.service”导出*;从“/member.service”导出*;我像这样导入了我的服务->从“/service”导入{EmployeeService,MemberService};但是当我像这样改变路径->从'/service/employee.service'导入{EmployeeService};它解决了我的问题这是一个答案吗?我也玩过这些。有趣的是,当我注释掉第一个时,我会得到一个错误:未捕获错误:由模块AppModule导入的意外值“[object object]”。请添加@NgModule注释,但当它出现时,我会得到更具体的错误。Angular发布了一个新版本,修复了“编译器:使用冗余注入(#20320)(4cc6abb)识别NgModule”。可能是这样吧?
import 'core-js/es6/reflect';
import 'core-js/es7/reflect';
import "reflect-metadata";
import "zone.js";