typestack / class-transformer

Decorator-based transformation, serialization, and deserialization between objects and classes.
MIT License
6.75k stars 493 forks source link

question: Use `strategy: 'excludeAll'` with some explicitly untyped data #1730

Open Cyberuben opened 1 month ago

Cyberuben commented 1 month ago

I was trying to... Almost all of my code is typed properly, with DTOs and validation on input data. All my responses are either mapped to entities (from TypeORM), or DTOs which I explicitly convert to these DTOs before returning them as plain objects again, to prevent fields that I don't want public from leaking out.

Now I'm dealing with some data which I'm not able to build the typing for, as it is calling an external API and passing through the response. I want to return this data anyway.

The problem: https://stackblitz.com/edit/typescript-playground-ec9vct?file=index.ts

In the code above, you can see that the object in both stages is just an empty object. How can I have class transformer accept that this is untyped data?

diffy0712 commented 1 month ago

Hello @Cyberuben,

it seems that when excludeAll strategy is used, the value does not contain the nested object for some reason. This might be a bug, I have to look at this a bit if I have time.

But to answer your question. You can use the following transform @Transform(({key, obj}) => obj[key]).

Hope this helps :)