8

在我的 Angular 应用程序中,我试图在我的模块中使用工厂提供程序:

export function getMyFactory(): () => Window {
  return () => window;
}

@NgModule({
  providers: [
    { provide: WindowRef, useFactory: getMyFactory() },
  ],
})
export class MyModule {}

但这失败了:

为导出的符号“MyModule”生成的元数据中遇到错误:

收集的元数据包含将在运行时报告的错误:不支持 Lambda

4

4 回答 4

18

我在 GitHub 的一个线程上发现了一个简单的解决方案:haochi发布的静态函数中不支持 Arrow lambda

解决方案基本上是:

将结果分配给变量,然后返回变量


因此,就我而言,我通过替换解决了:

export function getMyFactory(): () => Window {
  return () => window;
}

和:

export function getMyFactory(): () => Window {
  const res = () => window;
  return res;
}
于 2019-08-21T15:16:39.283 回答
11

只需添加这样的// @dynamic评论:

// @dynamic
export function getMyFactory(): () => Window {return () => window;}

角度文档中的更多信息

于 2020-06-29T04:04:18.170 回答
5

我在 Angular 库中也发生了同样的错误。

我通过在下"strictMetadataEmit": false,设置忽略它。tsconfig.lib.jsonangularCompilerOptions

于 2020-12-09T16:24:53.833 回答
1

我在尝试将 Promise 作为函数返回时遇到了同样的问题,并替换了它:

export function myFunc(): Function {
    const result = () => ...
    return result;
}

和:

export function myFunc(){
    const result = () => ...
    return result;
}
于 2020-02-05T19:12:08.653 回答