typescript-advanced-types について
高度な型を活用しながらコードの読みやすさを保つ、TypeScript 開発者向けのスキルです。ジェネリクス、条件型、型ガードを扱い、必要に応じて例を含むコンテキストファイルを参照できます。
主な機能
- 01信頼できない入力に unknown を使用
- 02ジェネリクスと条件型を活用
- 03マップ型でオブジェクトのプロパティを変換
- 04型ガードで型を絞り込む
- 05再利用可能な型ユーティリティをテスト
活用シーン
- 01関連する型間で再利用可能なロジックを型付け
- 02複数のバリエーションを持つデータをモデル化
- 03外部入力を検証して型を絞り込む
- 04型ユーティリティを作成してテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ flpbalada/ fb-skills --skill typescript-advanced-typesインストール後、Claude Code で/typescript-advanced-typesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
context/core-examples.mdpatterns.mdtechniques.md詳細
TypeScript の高度な型
目標
高度な型を使って安全性を高めつつ、コードを読みにくくしないようにします。 複雑さに見合う効果が得られるまでは、シンプルな型を優先します。
ルール
- 信頼できない入力には、
anyではなくunknownを使います。 - シンプルな型は TypeScript に推論させます。
- 型パラメーターは、複数の位置の型を関連付ける必要がある場合にのみ追加します。
- バリエーションには、ユニオン型と判別可能なユニオン型を優先します。
- オブジェクトの形状には
interfaceを優先します。 - ユニオン型、条件型、マップ型、エイリアスには
typeを使います。 - 深くネストした条件型や再帰型は避けます。
- プロジェクトが対応している場合は、再利用可能なユーティリティの型テストを追加します。
主なツール
- ジェネリクス:関連する型全体でロジックを再利用します。
- 条件型:型の条件に応じて型を選択します。
- マップ型:オブジェクトのプロパティを変換します。
- テンプレートリテラル型:文字列のパターンを制約します。
- ユーティリティ型:
Pick、Omit、Partial、Required、Readonly、Recordを使います。 infer:配列、Promise、関数、オブジェクトから内部の型を抽出します。- 型ガード:実行時に
unknownを絞り込みます。 - アサーション関数:実行時の検証に失敗した場合に例外をスローします。
- ブランド型:検証済みの文字列や ID を区別します。
ジェネリクスのルール
型パラメーターが一度しか登場しない場合は、おそらく不要です。
便利なパターン
type StrictOmit<T, K extends keyof T> = Omit<T, K>;
type ElementType<T> = T extends (infer U)[] ? U : never;
type UserId = string & { readonly __brand: "UserId" };
type User = z.infer<typeof userSchema>;
避けること
- 近道として
anyを使うこと。 - 型ガードが使える場合に、型アサーションを使うこと。
- 意図を分かりにくくする、過度に凝った型。
- 制約のないジェネリック型パラメーター。
- スキーマや API 定義からすでに利用できる型を重複して定義すること。
- コンパイラーの速度を低下させる再帰型。
段階的な情報開示
このスキルでは、コンテキストファイルを通じて詳細な例を提供します。必要に応じて読み込んでください。
| コンテキストファイル | 読み込むタイミング |
|---|---|
context/core-examples.md | ジェネリクス、条件型、マップ型の例が必要なとき |
context/patterns.md | EventEmitter、API クライアント、Builder などの実践的なパターンを実装するとき |
context/techniques.md | 型推論、型ガード、アサーション、テストについて確認するとき |
参考資料
出力
- 型のアプローチ。
- 最もシンプルな型の形状。
- 必要に応じたジェネリック型の制約。
- 入力が
unknownの場合の実行時検証の境界。
コメント
Markdown 対応