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;
}