不支持函数调用。考虑使用对导出函数的引用替换函数或lambda

时间:2017-03-24 11:56:28

标签: angular typescript lambda

我在我的应用程序中使用了APP_INITIALIZER,并在app.module.ts中设置了如下所示的必要导入:

@NgModule({
  ...
  providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: (context: ContextService) => () => context.load(), deps: [ContextService], multi: true } ],
  ...
})

当我构建新的(ng build -watch)时,我得到以下错误,后续版本正常工作

  

ERROR in Error遇到静态解析符号值。   不支持函数调用。考虑更换功能或   lambda引用了一个导出函数(位置24:46)   原始.ts文件),解决C:/.../ app.module.ts中的符号AppModule

我尝试将() => context.load()移动到同一文件中的导出函数中:

export function loadContext(context: ContextService) {
    return () => context.load();
}

...然后改变了@NgModule的提供者部分:

@NgModule({
      ...
      providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: (context: ContextService) => loadContext(context), deps: [ContextService], multi: true } ],
      ...
    })

如上所述,构建仍然失败并出现相同的错误。后续构建工作正常。

如何解决此初始构建错误?

1 个答案:

答案 0 :(得分:7)

将内联闭包移动到函数:

function loadContext(context: ContextService) {
  return () => context.load();
}

@NgModule({
  ...
  providers: [ ..., ContextService, { provide: APP_INITIALIZER, useFactory: loadContext, deps: [ContextService], multi: true } ],
  ...
})

另见How to pass parameters rendered from backend to angular2 bootstrap method