Skip to content

no-construct-in-interface ​

βœ… Using recommended in an ESLint configuration enables this rule.

This rule enforces specifying interfaces for read-only resources (e.g. IBucket) for properties in an interface.

When AWS resource Constructs (e.g. Bucket) implements interfaces for read-only resources (e.g. IBucket), it is recommended to specify the read-only resource interface (e.g. IBucket) for interface properties. This helps prevent unintended resource modifications.


πŸ”§ How to use ​

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

βœ… Correct Example ​

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 {
  // βœ… Read-only interfaces (e.g. `IBucket`) can be used
  readonly bucket: IBucket;

  // βœ… Constructs that are not AWS resource constructs (e.g. `DockerImageAsset`) can be used
  readonly asset: DockerImageAsset;

  // βœ… When there is no read-only resource interface, Construct types (e.g. `MetricFilter`) can be used
  readonly metricFilter: MetricFilter;
}

❌ Incorrect Example ​

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

interface MyConstructProps {
  // ❌ When a read-only resource interface exists, Construct types (e.g. `Bucket`) should not be used
  readonly bucket: Bucket;
}