调用AWS SDK的GetEntitlementsCommand报Union多非空成员TypeError
问题结论
这是@aws-sdk/client-marketplace-entitlement-service 3.41.0版本的已知Bug,和你的代码逻辑无关。
问题根因
SDK的反序列化校验逻辑存在缺陷:
- AWS Marketplace Entitlement Service接口返回的Entitlement的Value字段是Union类型,实际返回的原始结构中会同时携带类型标记字段
EntitlementValueType和对应类型的实际值字段(比如你遇到的IntegerValue) - 该版本SDK的
expectUnion方法没有将类型标记字段排除在校验范围外,直接校验时检测到有两个非空字段,违反了Union类型只能有一个非空成员的规则,因此抛出错误。 - CLI可以正常返回是因为AWS CLI的反序列化逻辑会自动过滤掉类型标记字段,只保留实际值字段。
解决方案
- 优先升级SDK版本:该问题在后续的SDK版本中已经得到修复,你可以将
@aws-sdk/client-marketplace-entitlement-service升级到3.200.0及以上的稳定版本即可解决。 - 临时兼容方案:如果暂时无法升级SDK,可以自行封装请求逻辑,直接调用AWS OpenAPI接口拿到原始返回值后自行处理,绕过SDK的默认反序列化步骤。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

