mcpField
T
typescript-expert

typescript-expert

github.com/shipshitdev開発3998 回インストール2 日前に更新
リポジトリ

typescript-expert について

プロジェクト診断、型安全な実装、リファクタリング、性能改善を扱う TypeScript 開発者向けスキルです。環境に応じた手順と、ルール集やリファレンスを組み合わせています。

主な機能

  1. 01プロジェクト設定とツールの分析
  2. 02高度な型システムのパターン
  3. 0343項目のリファクタリングルール
  4. 04型チェックとビルドの最適化
  5. 05JavaScriptからの段階的な移行ガイド

活用シーン

  1. 01既存の TypeScript 設定に合わせた変更
  2. 02型アサーションを安全な型の絞り込みに変更
  3. 03型チェックの遅さの調査
  4. 04段階的な JavaScript 移行の計画

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/shipshitdev/skills --skill typescript-expert

インストール後、Claude Code で/typescript-expertを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

plugin.json
README.md
licenses/
LICENSE
LICENSE-cursor-team-kit
LICENSE-superpowers
NOTICE.txt
references/
full-guide.md
patterns.md
references/rules/
_sections.md
_template.md
arch-avoid-partial-abuse.md
arch-branded-types.md
arch-const-assertion.md
arch-discriminated-unions.md
arch-interfaces-over-intersections.md
arch-readonly-by-default.md
arch-satisfies-over-annotation.md
compile-avoid-deep-recursion.md
compile-base-types-over-unions.md
compile-explicit-return-types.md
compile-project-references.md
error-discriminated-error-unions.md
error-exhaustive-error-handling.md
error-never-for-unreachable.md
error-result-type.md
error-typed-catch.md
generic-avoid-distributive-surprises.md
generic-constrain-dont-overconstrain.md
generic-infer-over-annotate.md
generic-mapped-type-utilities.md

詳細

TypeScript エキスパート

呼び出されたとき

  1. プロジェクトのセットアップを包括的に分析します。

    パフォーマンスを考慮し、組み込みのファイル読み取り機能や検索機能を優先してください。シェルコマンドは代替手段として使用します。

    # Core versions and configuration
    bunx tsc --version
    node -v
    # Detect tooling ecosystem (prefer parsing package.json)
    node -e "const p=require('./package.json');console.log(Object.keys({...p.devDependencies,...p.dependencies}||{}).join('\n'))" 2>/dev/null | grep -E 'biome|eslint|prettier|vitest|turborepo|nx' || echo "No tooling detected"
    # Check for monorepo (fixed precedence)
    (test -f pnpm-workspace.yaml || test -f lerna.json || test -f nx.json || test -f turbo.json) && echo "Monorepo detected"
    

    検出後は、次の点に応じてアプローチを調整します。

    • インポート形式(絶対パスか相対パスか)を合わせる
    • 既存の baseUrl/paths 設定を尊重する
    • 生のツールより既存のプロジェクトスクリプトを優先する
    • モノレポでは、広範な tsconfig の変更を行う前にプロジェクト参照を検討する
  2. 問題の具体的なカテゴリと複雑さのレベルを特定します。

  3. 以下の専門知識から適切な解決策を選択します。

  4. 十分に検証します。

    # Fast fail approach (avoid long-lived processes)
    bun run typecheck || bunx tsc --noEmit
    bun run test || bunx vitest run --reporter=basic --no-watch
    # Only if needed and build affects outputs/config
    bun run build
    

    安全上の注意: 検証時に watch/serve プロセスを起動しないでください。単発の診断のみを使用します。

高度な型システムの専門知識

型レベルのプログラミングパターン

ドメインモデリングのためのブランド型 — 名目的型(type UserId = Brand<string, 'UserId'>)を使うと、同じ基底型を持つドメインプリミティブが誤って混同されるのを防げます。重要なドメインプリミティブ、API 境界、通貨や単位に使用します。ルール:references/rules/arch-branded-types.md、チートシート:references/typescript-cheatsheet.md(§ Branded Types)。参考資料:https://egghead.io/blog/using-branded-types-in-typescript

高度な条件型 — 再帰的な型操作(例:DeepReadonly<T>)や、テンプレートリテラルを使ったイベントソース API です。ライブラリ API、型安全なイベントシステム、コンパイル時検証に使用します。型のインスタンス化深度エラーに注意してください(再帰は10レベルまでに制限します)。references/typescript-cheatsheet.md(§ Conditional Types、§ Mapped Types、§ Template Literal Types)と references/rules/compile-avoid-deep-recursion.md を参照してください。

型推論のテクニック — リテラル型を保持したまま制約を検証するには satisfies(TS 5.0+)を使用し、リテラル配列やオブジェクトで最大限に推論させるには as const アサーションを使用します。ルール:references/rules/arch-satisfies-over-annotation.md、references/rules/arch-const-assertion.md。

リファクタリングのルール

型安全性を高めるための TypeScript のリファクタリングやモダナイズ(as キャストをナローイングに置き換える、列挙型より判別可能なユニオンを使う、型付きエラー処理、TS 4.x-5.x の機能、コンパイル速度など)では、references/rules/ にある43のルールを活用します。該当するルールのみを、1つずつファイルを開いてください。references/rules/_sections.md ではカテゴリが、_template.md では新しいルールの形式が定義されています。

優先度カテゴリプレフィックス
1型アーキテクチャ(CRITICAL)arch-
2型ナローイングとガード(CRITICAL)narrow-
3モダン TypeScript(HIGH)modern-
4ジェネリックパターン(HIGH)generic-
5コンパイラのパフォーマンス(MEDIUM-HIGH)compile-
6エラー安全性(MEDIUM)error-
7ランタイムパターン(MEDIUM)perf-
8特性と落とし穴(LOW-MEDIUM)quirk-
1. 型アーキテクチャ(CRITICAL)
2. 型の絞り込みとガード(CRITICAL)
3. モダンな TypeScript(HIGH)
4. ジェネリックのパターン(HIGH)
5. コンパイラーのパフォーマンス(MEDIUM-HIGH)
6. エラーの安全性(MEDIUM)
7. ランタイムパターン(中)
8. 特有の挙動と落とし穴(低〜中)

動作を維持した再構成は refactor-code スキルが担当します。型アーキテクチャの作業では、このスキルがこれらのルールを読み込みます。

パフォーマンス最適化戦略

型チェックのパフォーマンス

bunx tsc --extendedDiagnostics --incremental false | grep -E "Check time|Files:|Lines:|Nodes:"

「Type instantiation is excessively deep」に対する一般的な修正方法:型の交差をインターフェースに置き換える(references/rules/arch-interfaces-over-intersections.md)、大きなユニオン型(100 メンバー超)を分割する(references/rules/compile-base-types-over-unions.md)、循環するジェネリック制約を避ける、型エイリアスを使用して再帰を断ち切る。エクスポートする関数には明示的な戻り値の型を追加します(references/rules/compile-explicit-return-types.md)。

ビルドパフォーマンスのパターン

  • ライブラリの型チェックに限り skipLibCheck: true を有効にします(大規模プロジェクトではパフォーマンスが大幅に向上することがよくありますが、アプリの型付けに関する問題を見逃さないようにしてください)
  • .tsbuildinfo キャッシュとともに incremental: true を使用します
  • include/exclude を正確に設定します
  • モノレポの場合:composite: true とプロジェクト参照を使用します(references/rules/compile-project-references.md)

実際の問題の解決

複雑なエラーパターン

「X の推論された型に名前を付けられません」

  • 原因:型のエクスポート漏れ、または循環依存
  • 修正の優先順位:必要な型を明示的にエクスポートする、ReturnType<typeof function> ヘルパーを使用する、型のみのインポートで循環依存を解消する
  • リソース:https://github.com/microsoft/TypeScript/issues/47663

型宣言の不足 — 型付けされていないパッケージに対して、アンビエント .d.ts モジュール宣言を追加します。references/typescript-cheatsheet.md(§ Module Declarations)を参照してください。詳しくは Declaration Files Guide を参照してください。

「型の比較でスタック深度が過剰です」

  • 原因:循環型、または深く再帰する型
  • 修正の優先順位:条件型で再帰の深さを制限する、型の交差の代わりに interface の継承を使用する、ジェネリック制約を簡素化する
// Bad: Infinite recursion
type InfiniteArray<T> = T | InfiniteArray<T>[];

// Good: Limited recursion
type NestedArray<T, D extends number = 5> =
  D extends 0 ? T : T | NestedArray<T, [-1, 0, 1, 2, 3, 4][D]>[];

モジュール解決の謎 — ファイルが存在するのに「Cannot find module」と表示される場合:

  1. moduleResolution がバンドラーに合っているか確認します
  2. baseUrl と paths の整合性を確認します
  3. モノレポの場合:ワークスペースプロトコル(workspace:*)が設定されていることを確認します
  4. キャッシュのクリアを試します:rm -rf node_modules/.cache .tsbuildinfo

実行時のパスマッピング — TypeScript のパスはコンパイル時にのみ機能し、実行時には機能しません。

  • ts-node:ts-node -r tsconfig-paths/register を使用します
  • Node ESM:ローダーの代替手段を使用するか、実行時に TS パスを使用しないようにします
  • 本番環境:パスを解決した状態で事前コンパイルします
移行の専門知識

JavaScript から TypeScript への移行 — 段階的な戦略です。既存の tsconfig で allowJs/checkJs を有効にし、ファイル名を少しずつ変更し(.js → .ts)、ファイルごとに型を追加して、strict モードの機能を一つずつ有効にします。コマンドの全手順と任意の自動化ヘルパー(ts-migrate、typesync)については、references/full-guide.md(§ Migration Playbook)を参照してください。

ツール移行の判断

移行元移行先移行するタイミング移行にかかる労力
ESLint + PrettierBiome大幅な高速化が必要で、ルールが少なくても問題ない場合低(1 日)
lint に TSC を使用型チェックのみファイルが 100 個以上あり、より速いフィードバックが必要な場合中(2〜3 日)
LernaNx/Turborepoキャッシュや並列ビルドが必要な場合高(1 週間)
CJSESMNode 18 以降で、モダンなツールを使用する場合高(状況による)
モノレポの管理

Nx と Turborepo の判断基準

  • Turborepo を選ぶ場合:構成がシンプルで、速度が必要で、パッケージ数が 20 未満
  • Nx を選ぶ場合:依存関係が複雑で、可視化が必要で、プラグインが必須
  • パフォーマンス:大規模なモノレポ(パッケージ数が 50 超)では、Nx の方が優れたパフォーマンスを発揮することがよくあります

TypeScript モノレポの設定 — ルート tsconfig の references 配列と、パッケージごとの composite/declaration/declarationMap を設定します。設定の全体については、references/full-guide.md(§ Monorepo TypeScript Configuration)を参照してください。

モダンなツールに関する専門知識

Biome と ESLint の比較

Biome を使う場合: 速度が重要で、lint とフォーマットに単一のツールを使いたい場合、TypeScript を第一に考えたプロジェクトの場合、typescript-eslint の 100 以上のルールに対して、TS ルールが 64 個でも問題ない場合。

ESLint を使い続ける場合: 特定のルールやプラグインが必要な場合、複雑なカスタムルールがある場合、Vue/Angular を使用している場合(Biome のサポートは限定的です)、型情報を活用した lint が必要な場合(Biome はまだ対応していません)。

型テストの戦略

Vitest による型テスト(推奨) — expectTypeOf を使った .test-d.ts ファイルを作成し、コンパイル時にプロパティや戻り値の型を検証します。全体的な例については、references/full-guide.md(§ Vitest Type Testing)を参照してください。

型をテストするタイミング: ライブラリを公開する場合、複雑なジェネリック関数を使う場合、型レベルのユーティリティを使う場合、API コントラクトを扱う場合。

デバッグの熟達

CLI デバッグツール — モジュール解決をトレースし(tsc --traceResolution)、型チェックのパフォーマンスをプロファイルし(tsc --generateTrace)、tsx/ts-node --inspect-brk でファイルを直接デバッグします。コマンド一式については、references/full-guide.md(§ CLI Debugging Tools)を参照してください。

カスタムエラークラス — Error を継承し、this.name を設定して、スタックを保持するために Error.captureStackTrace を呼び出します。パターンの全体については、references/full-guide.md(§ Custom Error Classes)を参照してください。

現在のベストプラクティス

デフォルトで strict にする

strict: true に加えて、noUncheckedIndexedAccess、noImplicitOverride、exactOptionalPropertyTypes、noPropertyAccessFromIndexSignature を使用します。本番環境ですぐに使える strict 設定の全体については、references/tsconfig-strict.json を参照してください。

ESM を第一にするアプローチ
  • package.json で "type": "module" を設定します
  • 必要に応じて、TypeScript の ESM ファイルには .mts を使います
  • モダンなツール向けに "moduleResolution": "bundler" を設定します
  • CJS には動的インポートを使います:const pkg = await import('cjs-package')
    • 注:await import() を使うには、async 関数または ESM のトップレベル await が必要です
    • ESM で CJS パッケージを使う場合:パッケージのエクスポート構造やコンパイラー設定によっては、(await import('pkg')).default が必要になることがあります
AI を活用した開発
  • AI コーディングアシスタントは、TypeScript のジェネリクスや定型的な型定義を得意とします
  • AI が生成した型は型テストで検証します
  • 複雑な型は、AI が文脈を把握できるようにドキュメント化します

コードレビューのチェックリスト

型安全性
  • 暗黙の any 型がない(unknown または適切な型を使う)
  • 厳密な null チェックが有効になっており、適切に処理されている
  • 型アサーション(as)には根拠があり、最小限にとどめられている
  • ジェネリック制約が適切に定義されている
  • エラー処理に判別可能なユニオン型が使われている
  • 公開 API の戻り値の型が明示的に宣言されている
TypeScript のベストプラクティス
  • オブジェクトの形状には type より interface を優先します(エラーメッセージが改善されます)
  • リテラル型には const アサーションを使用します
  • 型ガードと型述語を活用します
  • よりシンプルな解決策がある場合は、複雑な型操作を避けます
  • テンプレートリテラル型を適切に使用します
  • ドメインプリミティブにはブランド型を使用します
パフォーマンスに関する考慮事項
  • 型の複雑さによってコンパイルが遅くならないようにします
  • 型のインスタンス化の深さが過剰にならないようにします
  • ホットパスでは複雑なマップ型を避けます
  • tsconfig で skipLibCheck: true を使用します
  • モノレポではプロジェクト参照を設定します
モジュールシステム
  • 一貫したインポート/エクスポートパターンを使用し、循環依存を避けます
  • バレルエクスポートを適切に使用します(過剰なバンドルを避けます)
  • ESM/CJS の互換性を適切に処理し、コード分割には動的インポートを使用します
エラー処理のパターン
  • エラーには Result 型または判別可能なユニオンを使用します(references/rules/error-*.md)
  • 適切な継承を備えたカスタムエラークラスと、型安全なエラーバウンダリーを使用します
  • never 型を使用して switch ケースを網羅します
コードの整理
  • 型を実装と同じ場所に配置します
  • 共有型は専用のモジュールにまとめます
  • 可能な限りグローバルな型拡張を避けます
  • 宣言ファイル(.d.ts)を適切に使用します

クイック判断ツリー

"Which tool should I use?"
Type checking only? → tsc
Type checking + linting speed critical? → Biome
Type checking + comprehensive linting? → ESLint + typescript-eslint
Type testing? → Vitest expectTypeOf
Build tool? → Project size <10 packages? Turborepo. Else? Nx

"How do I fix this performance issue?"
Slow type checking? → skipLibCheck, incremental, project references
Slow builds? → Check bundler config, enable caching
Slow tests? → Vitest with threads, avoid type checking in tests
Slow language server? → Exclude node_modules, limit files in tsconfig

専門家向けリソース

問題を解決済みとする前に、変更によって既存の機能が損なわれないことを必ず検証してください。

Typescript ベストプラクティスの手順

このワークフローを実行する際は、typescript-best-practices procedure を読みます。 このエントリーポイントで許可された範囲とモードを、すべての手順に適用してください。 他のスキルは、このディストリビューションの有効なカタログを通じて解決し、 リソースはインストール済みのスキルディレクトリを基準に解決してください。

コメント