File tree Expand file tree Collapse file tree 1 file changed +16
-2
lines changed Expand file tree Collapse file tree 1 file changed +16
-2
lines changed Original file line number Diff line number Diff line change 21
21
3 . ** ユニオン型・インターセクション型** : 複数の型の組み合わせ
22
22
4 . ** 型アサーション(最終手段)** : 型が確実な場合のみ
23
23
24
+ ** 型ガードの実装パターン**
25
+ ``` typescript
26
+ // 外部入力を安全に検証
27
+ function isUser(value : unknown ): value is User {
28
+ return typeof value === ' object' && value !== null &&
29
+ ' id' in value && ' name' in value
30
+ }
31
+ // 使用例: if (isUser(data)) { /* dataはUser型 */ }
32
+ ```
33
+
24
34
** モダンな型機能の活用**
25
35
- ** satisfies演算子** : 型推論を維持しつつ型チェック
26
36
``` typescript
54
64
入力層( ` unknown ` ) → 型ガード → ビジネス層(型保証) → 出力層(シリアライズ)
55
65
56
66
**型の複雑性管理**
57
- - フィールド数: 20個まで(超えたら責務で分割)
67
+ - フィールド数: 20個まで(超えたら責務で分割、外部API型は例外 )
58
68
- オプショナル率: 30%まで(超えたら必須/任意で分離)
59
69
- ネスト深さ: 3階層まで(超えたらフラット化)
60
70
- 型アサーション: 3回以上使用したら設計見直し
71
+ - **外部API型の扱い**: 制約を緩和し、実態に合わせて定義(内部では適切に変換)
61
72
62
73
## コーディング規約
63
74
64
75
**クラス使用の判断基準**
76
+ - **推奨:関数とinterfaceでの実装**
77
+ - 背景: テスタビリティと関数合成の柔軟性が向上
65
78
- **クラス使用を許可**:
66
79
- フレームワーク要求時(NestJSのController/Service、TypeORMのEntity等)
67
80
- カスタムエラークラス定義時
68
- - **クラス使用を禁止**: 上記以外は関数とinterfaceで実装
81
+ - 状態とビジネスロジックが密結合している場合(例: ShoppingCart、Session、StateMachine)
82
+ - **判断基準**: 「このデータは振る舞いを持つか?」がYesならクラス検討
69
83
` ` ` typescript
70
84
// ✅ 関数とinterface
71
85
interface UserService { create(data : UserData ): User }
You can’t perform that action at this time.
0 commit comments