type-checking-vs-testing について
TypeScriptの型チェックとユニットテストがそれぞれ異なるエラーを検出することを解説するスキルです。型をテストの代わりにせず、両者を組み合わせる判断に役立ちます。
主な機能
- 01コンパイル時と実行時のエラーを区別
- 02型とテストの相補的な役割を説明
- 03ロジックの誤りと境界条件を扱う
活用シーン
- 01型チェックとテストの使い分け
- 02境界条件を含むテストスイートの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ marius-townhouse/ effective-typescript-skills --skill type-checking-vs-testingインストール後、Claude Code で/type-checking-vs-testingを入力して読み込まれたか確認します。
詳細
型チェックとユニットテストの関係を理解する
概要
型チェックとユニットテストは、異なる種類のエラーを検出します。型チェックはコンパイル時に型の不一致を検出します。ユニットテストは実行時にロジックエラーやエッジケースを検出します。これらは互いに補完し合います。型によって一部のテストの必要性は減りますが、ロジックのテストを置き換えることはできません。
このスキルを使う場面
- 型とテストのどちらを使うか判断する
- ロジックエラーを検出する
- エッジケースをテストする
- テストスイートを構築する
- 前提を検証する
絶対に守るべきルール
型を使ってコンパイル時に型エラーを検出します。テストを使って実行時にロジックエラーやエッジケースを検出します。これらは互いに補完し合います。
例
// Type checking catches:
function add(a: number, b: number): number {
return a + b;
}
add(1, '2'); // Compile error - types don't match
// Tests catch:
function divide(a: number, b: number): number {
return a / b; // Logic error: no check for division by zero
}
// Type system can't catch this - need tests:
test('divide by zero', () => {
expect(() => divide(1, 0)).toThrow();
});
参考資料
- Dan Vanderkam 著『Effective TypeScript』第2版
- 項目77:型チェックとユニットテストの関係を理解する
コメント
Markdown 対応