mcpField
T
typescript

typescript

github.com/enderpuentes開発259 回インストール5 週間前に更新
リポジトリ

typescript について

TypeScriptの型システム、基本構文、プロジェクト設定、実践的な手法をまとめたスキルです。TypeScriptを書く、またはレビューする開発者向けです。

主な機能

  1. 01基本的な型と型注釈の解説
  2. 02型の絞り込み、関数、ジェネリクス
  3. 03オブジェクト型とユーティリティ型
  4. 04クラスとモジュールの解説
  5. 05tsconfig.json設定の参照
  6. 06型安全の実践とよくある問題

活用シーン

  1. 01コーディング中のTypeScript構文の確認
  2. 02関数インターフェースの型選択
  3. 03TypeScriptプロジェクトの設定
  4. 04コードの型付けに関する問題の確認

インストール

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

$npx skills add https://github.com/enderpuentes/ai-agent-skills --skill typescript

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

同梱ファイルLICENSE.mdreference.md

詳細

TypeScript

概要

TypeScript は静的型付けを備えた JavaScript です。コンパイル時の型チェッカーが追加されますが、実行時の動作は JavaScript と同じです。実行時のタスク(リストの並べ替え、DOM、非同期処理など)には、JavaScript の知識が TypeScript にも活かせます。型、インターフェース、ジェネリクス、および優れたツールを活用するには TypeScript を使います。

基本的な考え方:型は形状と契約を表し、コンパイラーは実行前に型エラーを検出します。ベストプラクティスとして、tsconfig.json で strict を有効にしてください。


クイックリファレンス

概念構文/メモ
型注釈let x: string, function f(n: number): void
インターフェースinterface User { name: string; id: number }
型エイリアスtype Id = string | number
ユニオンstring または number(ユニオン型)
オプショナルprop?: string または prop: string | undefined
ジェネリクスfunction id<T>(x: T): T { return x }
スキーマから型を推論ライブラリを使います(例:Zod の z.infer<typeof schema>)

日常的に使う型

  • プリミティブ型:string、number、boolean、bigint、symbol。
  • 配列:number[] または Array<number>。
  • Any:any — 型チェックを無効にします。可能な限り避けてください。本当に不明なデータには unknown を使い、使用前に型を絞り込むことをおすすめします。
  • 型注釈(後置):const name: string = "x"、function greet(name: string): string { return "Hi " + name }。
  • オブジェクト型:{ name: string; age?: number } または interface User { name: string; age?: number }。
  • ユニオン型:string | number、リテラル型:"a" | "b"。

型の絞り込み

条件分岐を使って型を絞り込むと、TypeScript が型を推論できます。

  • typeof:if (typeof x === "string") { ... }
  • 真偽値の判定:if (value) { ... }
  • 等価性:if (x === null) { ... }
  • in:if ("name" in obj) { ... }
  • 型ガード:function isFish(pet: Fish | Bird): pet is Fish { ... }
  • 判別可能なユニオン:共通のリテラルフィールド(例:kind: "circle")を使い、それに基づいて switch 文で分岐します。

関数

  • シグネチャ:(a: string, b?: number) => boolean。戻り値がない場合は void を使います。
  • オーバーロード:複数の呼び出しシグネチャと、1 つの実装を定義します。
  • ジェネリクス:function first<T>(arr: T[]): T \| undefined。
  • 制約:function longest<T extends { length: number }>(a: T, b: T): T。

オブジェクト型と型の操作

  • インターフェース:interface Point { x: number; y: number }。拡張には extends を使います。
  • インデックスシグネチャ:[key: string]: number。
  • keyof:type K = keyof User → キーのユニオン型。
  • typeof:type C = typeof config(値 → 型)。
  • インデックスアクセス型:type Name = User["name"]。
  • マップ型:type Readonly<T> = { readonly [K in keyof T]: T[K] }。
  • 条件型:type F = T extends string ? number : boolean。
  • テンプレートリテラル型:type E = `on${Capitalize<Event>}`。
  • ユーティリティ型:Partial<T>、Required<T>、Pick<T, K>、Omit<T, K>、Record<K, V>、Exclude<T, U>、Extract<T, U>、NonNullable<T>、ReturnType<F>、Parameters<F>。

クラス

  • メンバー:class C { prop: number; method(): void {} }。
  • コンストラクター:constructor(public name: string) {}(パラメータプロパティ)。
  • 実装:class D implements I {}。
  • 拡張:class Child extends Parent {}。
  • 必要に応じて Readonly、private、protected を使います。

モジュール

  • ES モジュール:import { x } from "./file"、export const x = 1、export type { T }。
  • デフォルトエクスポート:export default App、import App from "./App"。
  • Namespace(レガシー):ES モジュールをおすすめします。

プロジェクト設定:tsconfig.json

  • strict:"strict": true を設定します(推奨)。strictNullChecks、noImplicitAny、strictFunctionTypes などが有効になります。
  • target:例:"ES2022" または "ESNext"。
  • module:例:"ESNext"、Node 用の "NodeNext"。
  • moduleResolution:バンドラーを使用する場合は "bundler"、Node 用には "NodeNext"。
  • paths:パスエイリアスには "@/*": ["./src/*"] を指定します。
  • include / exclude:コンパイル対象のファイルを指定します。
  • References:大規模なモノレポでは、プロジェクト参照を使用します。

公式の TSConfig リファレンスへのリンクは reference.md をご覧ください。


ベストプラクティス

  • strict モードを有効にします。
  • 拡張する可能性のあるオブジェクトの形状には interfaces を、ユニオン型、マップ型、エイリアスには type を使用します。
  • 可能な限り const と readonly を使用します。
  • 外部データには any ではなく unknown を使用し、使用前に型を絞り込みます。
  • generics を使って、関数の再利用性と型安全性を保ちます。
  • 実行時の検証と型定義には、スキーマライブラリ(例:Zod)を使用し、z.infer<typeof schema> で型を推論します。

よくある間違い

  • any:使用を避けます。代わりに unknown を使って型を絞り込むか、適切な型を指定します。
  • Non-null assertion (!):必要な場合に限って使用します。型の絞り込みやオプショナルチェーンを優先します。
  • Type assertions (as):外部から取得したデータには、型ガードまたはスキーマ検証を優先します。
  • Strict を無効にする:strict: true を維持し、無効にするのではなくエラーを修正します。

追加リソース

コメント