Description
Describe the feature
It would be way better if not every response property was optional.
I'm sure there were reasons for this, but I'm complaining anyway -- are the reasons for it really that justified? ಠ_ಠ I doubt it, I think AWS could invest in making it better.
Overall the SDK is pretty great to work with, but the blanket optional properties waste a lot of time.
Use Case
All response properties being optional makes TypeScript code cantankerous and ugly:
const { Stacks: [Stack] = [] } = await cfn.send(new DescribeStacksCommand({ StackName })
if (!Stack) {
throw new Error(`this shouldn't happen, but we need a non-null assertion here`)
}
const Parameters = Object.fromEntries(
// it's silly for ParameterKey to be marked optional
Stack.Parameters?.flatMap(p => p.ParameterKey ? [[p.ParameterKey, p.ParameterValue]] : [])
|| []
)
Proposed Solution
I don't know why exactly this is (microservices being implemented in a language where all values are nullable or something? Some obscure option to select which properties of the response we want?) But, there has to be a way to write up metadata on which properties are guaranteed to be defined in service responses.
Other Information
You might say, why not use TypeScript non-null operations (the trailing !
), but it feels too dangerous. It's reasonable to assume an ARN or Id property will always be defined, but there are plenty of properties where I don't think I can say for sure what the API guarantees.
Acknowledgements
- I may be able to implement this feature request
- This feature might incur a breaking change
SDK version used
3.588
Environment details (OS name and version, etc.)
macOS any