Angular 8:装饰器不支持函数表达式

Ser*_*gey 5 typescript angular

我在尝试在 Angular 8 中构建 prod 时遇到问题。错误是

ERROR in Error during template compile of 'AppModule'
  Function expressions are not supported in decorators in 'SocketLibModule'
    'SocketLibModule' references 'initializeApp'
      'initializeApp' contains the error at ../socket-lib/src/lib/socket-lib.module.ts(9,12)
        Consider changing the function expression into an exported function.
Run Code Online (Sandbox Code Playgroud)

什么指向我的库

export const SOCKET_CONFIG = new InjectionToken<SocketConfig>('SOCKET_CONFIG');

export function initializeApp(socketConfig: SocketConfig) {
  return (uriConfig: any) => {
    return () => uriConfig.load(socketConfig);
  };
}

@NgModule()
export class SocketLibModule {
  public static forRoot(socketConfig: SocketConfig): ModuleWithProviders {
    return {
      ngModule: SocketLibModule,
      providers: [
        {
          provide: SOCKET_CONFIG,
          useValue: socketConfig
        },
        {
          provide: APP_INITIALIZER,
          useFactory: initializeApp(socketConfig),
          deps: [ConfigInitService, HttpClientModule],
          multi: true
        },
        HttpClientModule
      ]
    };
  }

}
Run Code Online (Sandbox Code Playgroud)

错误点 (9,12)return (uriConfig: any) => {仅在左括号处指代这一点。

我试图将箭头函数更改为常规但没有任何更改以及错误点 (9,12)

小智 5

useFactory: initializeApp(socketConfig),
Run Code Online (Sandbox Code Playgroud)

这条线是问题。

应用初始化程序应该是一个工厂:这意味着它应该是

useFactory: initializeApp,
Run Code Online (Sandbox Code Playgroud)

否则,您将返回一个函数调用,这在 typescript 装饰器中是被禁止的(不仅仅是在 Angular 中,或者是第 8 版)