Open rehos opened 2 months ago
Hi @rehos ,
Thanks for reaching out. The reason why we generate " | undefined" for our types, is intentionally designed for forward compatibility reasons. This allows AWS services to change their APIs by making previously required
parameters optional
, ensuring that existing client applications will not break when the API becomes less strict.
To improve the typescript experience, you can cast your client to be an UncheckedClient
or AssertiveClient
from Smithy-Typescript package. Just be mindful that using UncheckedClient
eliminates compiler-generated nullability warnings for output fields by treating them as non-nullable. You should still perform manual type checks as necessary for your application's specific needs.
Thanks, Ran~
@RanVaknin, thank you for the clarification for required
types. For optional
types I think the generated code should also generate the " | undefined" to avoid compiler errors when setting the typescript compilation option exactOptionalPropertyTypes
to true
. We set this to true for our code base to get the most benefits when using @effect/schema.
Checkboxes for prior research
Describe the bug
Typescript types are for required and optional attributes are not generated corrrectly. I.e. required attributes can accept undefined. And optional attributes cannot accept
undefined
when setting the typescript compilation optionexactOptionalPropertyTypes
totrue
.Fixing this will probably also fix this issue
SDK version number
3.540.0
Which JavaScript Runtime is this issue in?
Node.js
Details of the browser/Node.js/ReactNative version
v20.11.0
Reproduction Steps
Just look at the generated typescript types for all clients
Observed Behavior
Typescript types of required attributes are all generated as a union with their type and
undefined
. And optional attributes are not generated as a union with undefined which gives problems when setting the typescript compilation optionexactOptionalPropertyTypes
totrue
.See for example the in the DynamoDB client the TableName and IndexName attributes in the type QueryInput:
Expected Behavior
I expect required attributes cannot be set to
undefined
while optional attributes can acceptundefined
. Also when setting the typescript compilation optionexactOptionalPropertyTypes
totrue
.So I expected that the generated code for the example above is generated as:
Possible Solution
Probably the following line in DocumentClientCommandGenerator.java:
should be changed to:
Additional Information/Context
No response