projectrules.ai

Reactコンポーネントの型定義規約

ReactTypeScriptComponent DesignType SafetyBest Practices

Description

Reactコンポーネントの型定義規約

Globs

*.tsx
---
description: Reactコンポーネントの型定義規約
globs: *.tsx
---

# Reactコンポーネントの型定義規約

## コンポーネントの型定義

### React.FC の使用を避ける

- `React.FC``FC` 型の使用は避け、代わりに明示的な型定義を使用する
- 理由:
  - `FC` は暗黙的に `children` プロパティを含むため、不要な場合でも型定義上で許可されてしまう
  - 型の明示性が低く、コードの意図が分かりにくくなる

### children を受け取るコンポーネントの場合

- `children` プロパティが必要な場合は、明示的に型定義に含める
- `ReactNode` 型を使用して定義する

## 型定義の一般的なルール

### 型推論の活用
- TypeScriptの型推論が効く場合は、冗長な型注釈を避ける
- ただし、関数の引数や戻り値の型は明示的に定義する

### any型の使用制限
- `any` 型の使用は原則として禁止
- どうしても必要な場合は、理由をコメントで記述する
- 代わりに `unknown` 型の使用を検討する

### オブジェクト型の定義
- インターフェース(`interface`)よりも型エイリアス(`type`)を優先して使用する
- 理由:
  - 型エイリアスの方が制約が強く、予期しない拡張を防げる
  - Union型やIntersection型との親和性が高い

### イベントハンドラの型定義
- イベントハンドラには適切なイベント型を指定する
- 例:`onChange: (e: ChangeEvent<HTMLInputElement>) => void`

### Nullableな値の扱い
- `null``undefined`を許容する場合は、必ず型定義に明示する
- オプショナルチェイニング(`?.`)やNull合体演算子(`??`)を活用する