CDK构造中如何传递topicProps属性并避免displayName重复?
解决AWS CDK中SNS Topic属性传递与默认displayName冲突问题
你的场景是创建一个继承自KMS Key的构造,同时初始化SNS Topic,需要给displayName设置默认值,同时传递topicProps中的其他属性,但直接使用...topicProps会导致displayName重复定义。
可以通过解构赋值+剩余运算符的方式解决,先把displayName从传入的topicProps中分离,再合并剩余属性和默认值:
export class MyConstruct extends kms.Key { constructor(scope: Construct, id: string, keyProps?: kms.KeyProps, topicProps: sns.TopicProps = {}) { super(scope, id, {...keyProps}); // 从topicProps中提取displayName,剩余属性存入restOfTopicProps const { displayName, ...restOfTopicProps } = topicProps; const topic = new sns.Topic(this, 'Topic', { ...restOfTopicProps, // 传递除displayName外的所有属性 displayName: displayName ?? "My Topic" // 优先使用传入的displayName,无则用默认值 }); } }
关键逻辑说明
- 解构赋值
const { displayName, ...restOfTopicProps } = topicProps会把传入的displayName单独提取,剩下的所有Topic属性都被收集到restOfTopicProps中,从根源避免了后续展开时的属性重复。 - 使用
??空值合并运算符替代原有的!= undefined判断,更简洁且语义明确:仅当displayName为null或undefined时,才使用默认值"My Topic"。 - 创建Topic时先展开
restOfTopicProps,再设置displayName,确保传入的displayName会覆盖默认值,同时保留其他所有传入属性。
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

