13

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

1
  • In my case I just declared static class property but did not define it with default value Commented Jul 3, 2024 at 7:19

4 Answers 4

23

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; } 
Sign up to request clarification or add additional context in comments.

Comments

14

Just add the // @dynamic comment like this:

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

More info in the angular docs

Comments

6

This same error happened to me in an Angular library.

I ignored it by setting "strictMetadataEmit": false, in tsconfig.lib.json under angularCompilerOptions.

Comments

1

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; } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.