writing-typescript について
writing-typescript は、TypeScript 開発者向けのスキル資料です。厳密な型付けや安全なデータ処理、合成を重視した設計を扱い、コードパターン、ツール構成、設定、注意点もまとめています。
主な機能
- 01厳密な型付けと安全なデータ解析
- 02型ガードと判別可能なユニオンの例
- 03tsconfig の設定ガイド
- 04テスト、フォーマット、lint ツール
- 05よくある TypeScript の注意点
活用シーン
- 01TypeScript プロジェクトの規約策定
- 02境界データの型安全な解析
- 03ビルド、テスト、lint の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill writing-typescriptインストール後、Claude Code で/writing-typescriptを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
PATTERNS.mdREACT.mdTESTING.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 をマージせず、置き換えます。
コメント
Markdown 対応