You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:40:13