---
url: /ja/rules/no-construct-in-interface.md
---

# no-construct-in-interface

このルールは、interface のプロパティに指定する型として、書き込み可能な CDK Construct 型 (例: `Bucket`) の代わりに読み取り専用リソースのための interface (例: `IBucket`) を指定することを強制します。

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

***

#### 🔧 使用方法

::: code-group

```ts [Oxlint]
// oxlint.config.ts
export default defineConfig({
  // ... some configs
  rules: {
    "awscdk/no-construct-in-interface": "error",
  },
});
```

```js [ESLint]
// eslint.config.mjs
export default defineConfig({
  // ... some configs
  rules: {
    "awscdk/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 を指定している
  readonly asset: DockerImageAsset;

  // ✅ 読み取り専用リソースのための interface が存在しない場合、
  //    AWS リソースを表す Construct 型 (`MetricFilter` など) は指定可能
  readonly metricFilter: MetricFilter;
}
```

#### ❌ 不適切な例

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

interface MyConstructProps {
  // ❌ 読み取り専用リソースのための interface が存在する場合、AWS リソースを表す Construct は指定不可
  //    (Bucket は `IBucket` を implements しているため、`IBucket` を指定すべき)
  readonly bucket: Bucket;
}
```
