mcpField
W
writing-typescript

writing-typescript

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

writing-typescript について

writing-typescript は、TypeScript 開発者向けのスキル資料です。厳密な型付けや安全なデータ処理、合成を重視した設計を扱い、コードパターン、ツール構成、設定、注意点もまとめています。

主な機能

  1. 01厳密な型付けと安全なデータ解析
  2. 02型ガードと判別可能なユニオンの例
  3. 03tsconfig の設定ガイド
  4. 04テスト、フォーマット、lint ツール
  5. 05よくある TypeScript の注意点

活用シーン

  1. 01TypeScript プロジェクトの規約策定
  2. 02境界データの型安全な解析
  3. 03ビルド、テスト、lint の設定

インストール

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

$npx skills add https://github.com/julianobarbosa/claude-code-skills --skill writing-typescript

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

同梱ファイル

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

PATTERNS.md
REACT.md
TESTING.md

詳細

TypeScript 開発(2025)

基本原則

  • 厳密な型付け:すべての厳密チェックを有効にします
  • 検証するのではなくパースする:信頼できないデータを境界で変換します
  • 継承より合成:小さく、焦点を絞った関数を使います
  • 暗黙より明示:any は使わず、unknown を優先します

ツールチェーン

bun          # Runtime + package manager (fast)
vite         # Frontend bundling
vitest       # Testing
eslint       # Linting
prettier     # Formatting

クイックパターン

型ガード
function isUser(value: unknown): value is User {
  return typeof value === "object" && value !== null && "id" in value;
}
判別可能なユニオン
type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };

function processResult<T>(result: Result<T>): T {
  if (result.ok) return result.value;
  throw result.error;
}
ユーティリティ型
type UserUpdate = Partial<User>;
type UserSummary = Pick<User, "id" | "name">;
type UserWithoutPassword = Omit<User, "password">;
type ReadonlyUser = Readonly<User>;

tsconfig.json の要点

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "noImplicitReturns": true,
    "isolatedModules": true
  }
}

参考資料

  • PATTERNS.md - コードパターンとスタイル
  • REACT.md - React コンポーネントのパターン
  • TESTING.md - vitest を使ったテスト

コマンド

bun install              # Install deps
bun run build            # Build
bun test                 # Test
bun run lint             # Lint
bun run format           # Format

注意点

  • verbatimModuleSyntax と名前付きエクスポートでの import type:値の型のみをインポートするとエラーになります。修正方法:import { type Foo } from "mod"(インラインマーカー)。
  • オブジェクトに対する as const:読み取り専用かつリテラル型に絞り込まれます — 型をアサートする as Foo や、型を拡大せずに検証する satisfies Foo とは異なります。
  • satisfies は型を拡大せずに検証し、as は型を拡大します — satisfies を使うべきところで as を使うと、リテラル型が暗黙のうちに失われます。
  • Array<T>.includes(x) では、x の型が T である必要があります — ユニオン型からの絞り込みは機能しません。標準的な修正方法は、型述語ヘルパーを使うことです。
  • strictNullChecks: false にすると、すべての型で T が T | null | undefined を意味します — 段階的な移行では、null 許容性について誤った型が残ることがあります。
  • tsconfig.json の extends は compilerOptions.paths を再帰的にマージしません — 子の paths は親の paths をマージせず、置き換えます。

コメント