construct-constructor-property
✅ Using recommended in an ESLint configuration enables this rule.
This rule enforces that constructors of CDK Construct classes have specific parameter names: scope, id
or scope, id, props
.
All Construct constructors should follow a consistent parameter naming pattern to maintain uniformity and predictability across the codebase.
Note: Additional parameters are allowed after the first three, as long as the initial parameters follow the prescribed pattern.
(This rule applies only to classes that extends from Construct
.)
🔧 How to use
ts
// eslint.config.mjs
export default [
{
// ... some configs
rules: {
"cdk/construct-constructor-property": "error",
},
},
];
✅ Correct Examples
ts
import { Construct } from "constructs";
// ✅ Constructor with "scope, id" parameter names
export class MyConstruct extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
}
}
ts
import { Construct } from "constructs";
export interface MyConstructProps {
bucketName: string;
}
// ✅ Constructor with "scope, id, props" parameter names
export class MyConstruct extends Construct {
constructor(scope: Construct, id: string, props: MyConstructProps) {
super(scope, id);
}
}
ts
import { Construct } from "constructs";
export interface MyConstructProps {
bucketName?: string;
}
// ✅ Constructor with "scope, id, props?" parameter names (optional props)
export class MyConstruct extends Construct {
constructor(scope: Construct, id: string, props?: MyConstructProps) {
super(scope, id);
}
}
ts
import { Construct } from "constructs";
export interface MyConstructProps {
bucketName: string;
}
// ✅ Constructor with additional parameters after "scope, id, props"
export class MyConstruct extends Construct {
constructor(
scope: Construct,
id: string,
props: MyConstructProps,
resourceName: string
) {
super(scope, id);
}
}
❌ Incorrect Examples
ts
import { Construct } from "constructs";
// ❌ First parameter is not named "scope"
export class MyConstruct extends Construct {
constructor(myScope: Construct, id: string) {
super(myScope, id);
}
}
ts
import { Construct } from "constructs";
// ❌ Second parameter is not named "id"
export class MyConstruct extends Construct {
constructor(scope: Construct, myId: string) {
super(scope, myId);
}
}
ts
import { Construct } from "constructs";
export interface MyConstructProps {
bucketName: string;
}
// ❌ Third parameter is not named "props"
export class MyConstruct extends Construct {
constructor(scope: Construct, id: string, myProps: MyConstructProps) {
super(scope, id);
}
}