In my Angular app, I'm trying to use a factory provider in my module:
export function getMyFactory(): () => Window {
return () => window;
}
@NgModule({
providers: [
{ provide: WindowRef, useFactory: getMyFactory() },
],
})
export class MyModule {}
but this is failing with:
Error encountered in metadata generated for exported symbol 'MyModule':
Metadata collected contains an error that will be reported at runtime: Lambda not supported
I've found an easy solution reported on a thread from GitHub: Arrow lambda not supported in static function posted by haochi
The solution is basically:
assigning the result to a variable, then return the variable
So in my case, I've resolved by replacing:
export function getMyFactory(): () => Window {
return () => window;
}
with:
export function getMyFactory(): () => Window {
const res = () => window;
return res;
}
Just add the // @dynamic
comment like this:
// @dynamic
export function getMyFactory(): () => Window {return () => window;}
More info in the angular docs
This same error happened to me in an Angular library.
I ignored it by setting "strictMetadataEmit": false,
in tsconfig.lib.json
under angularCompilerOptions
.
I had the same issue trying to return a promise as a function, and replaced this:
export function myFunc(): Function {
const result = () => ...
return result;
}
With:
export function myFunc(){
const result = () => ...
return result;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With