Skip to content

no-construct-in-interface

recommended を使用した場合、このルールが有効になります。

このルールは、interface のプロパティに、読み取り専用リソースのための interface (例: IBucket) を指定することを強制します。

AWS リソースを表す Construct (例: Bucket) が、読み取り専用リソースのための interface (例: IBucket) を implements している場合、interface のプロパティには、読み取り専用リソースのための interface (例: IBucket) を指定することが推奨されます。
これにより、意図しないリソースの変更を防ぐことができます。


🔧 使用方法

ts
// eslint.config.mjs
export default defineConfig([
  {
    // ... some configs
    rules: {
      "cdk/no-construct-in-interface": "error",
    },
  },
]);

✅ 正しい例

ts
import { IBucket } from "aws-cdk-lib/aws-s3";
import { DockerImageAsset } from "aws-cdk-lib/aws-ecr-assets";
import { MetricFilter } from "aws-cdk-lib/aws-logs";

interface MyConstructProps {
  // ✅ 読み取り専用リソースのための interface (`IBucket` など) は使用できます
  readonly bucket: IBucket;

  // ✅ AWS リソースを表す Construct でない Construct (`DockerImageAsset` など) は使用できます
  readonly asset: DockerImageAsset;

  // ✅ 読み取り専用リソースのための interface が存在しない場合、 Construct 型 (`MetricFilter` など) は使用できます
  readonly metricFilter: MetricFilter;
}

❌ 不正な例

ts
import { Bucket } from "aws-cdk-lib/aws-s3";

interface MyConstructProps {
  // ❌ 読み取り専用リソースのための interface が存在する場合、 Construct 型 (`Bucket` など) は使用すべきではありません
  readonly bucket: Bucket;
}