typescript-v6 について
TypeScript 6.0+の型システム機能と型安全なAPI設計のためのガイドです。型推論、ドメインモデル、コンパイル時の保証を中心に扱い、基本構文や実行時検証は対象外です。
主な機能
- 01条件型とマップ型
- 02型ガードと型の絞り込み
- 03判別可能なユニオン型
- 04プリミティブ値を区別するブランド型
- 05厳密で合成可能な型の実践
活用シーン
- 01型安全なステートマシンのモデル化
- 02オブジェクト型の体系的な変換
- 03識別子の誤った混同の防止
- 04unknown値の安全な型の絞り込み
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ blockmatic/ basilic-skills --skill typescript-v6インストール後、Claude Code で/typescript-v6を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced-generics.mdconditional-types.mddiscriminated-unions.md詳細
スキル:typescript
対象範囲
- 対象:TypeScript 6.0 以降の型システム機能、型安全な API、複雑なドメインモデル、型推論、コンパイル時の保証
- 対象外:基本構文、フレームワーク固有のパターン、実行時のバリデーション(別途 Zod を使用してください)
前提
- フォルダーでは
npm view typescript(すでに 7 の場合があります)ではなく、package.jsonのtypescriptを基準にします(このリポジトリでは@typescript/typescript6^6) - 6.0 は JavaScript ベースの最後のコンパイラーです。7.0 はネイティブ(Go)です。
@typescript/nativeはtscと並んで配置される場合がありますが、このスキルの対象バージョンではありません - 厳格モード(
"strict": true) - ES2020 以降を対象とします(6.0 のデフォルトは
esnext/es2025へ移行する傾向があります) - 6.0 で非推奨となったオプションは、7.0 で削除されるまで
"ignoreDeprecations": "6.0"で無視できます。非推奨項目は修正することを推奨します:https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/
原則
- 条件に基づいて型を選択するには、条件型を使用します
- オブジェクト型を体系的に変換するには、マップ型を使用します
- 実行時のチェックと型の絞り込みには、型ガード(
value is Type)を使用します - 網羅性チェックを備えた型安全なステートマシンには、判別可能なユニオンを使用します
- プリミティブ型の混同を防ぐには、ブランド型を使用します
- 型安全のため、
anyよりunknownを優先します - 型アサーション(
as Type)より型ガードを使用します - 型は合成しやすく、浅く保ちます(深いネストは避けます)
- 不変のデータ構造には
readonlyを指定します
制約
必須
- 厳格モード(
tsconfig.jsonの"strict": true)を有効にします - 型付けされていない値には
anyではなくunknownを使用します - 可能な場合は、型アサーションではなく型ガード(
value is Type)を使用します
推奨
- ユニオン型/ユーティリティ型には
typeを、オブジェクトの形状にはinterfaceを使用します - 型は合成しやすく、浅く保ちます
- 不変のデータ構造には
readonlyを指定します - プリミティブ型の混同を防ぐには、ブランド型を使用します
- TypeScript 7 のネイティブ版を採用する前に、6.0 の非推奨項目に対処します
避けるべきこと
anyの使用(型ガードと併せてunknownを使用します)- 検証を伴わない型アサーション
- ジェネリクスの過剰な使用(型が実際に変化する場合に限ります)
- 深い型のネスト(コンパイルが遅くなり、デバッグが難しくなります)
- インポートアサーション(
assert { type: ... })。インポート属性のwithを使用します
関連項目
パターン
マップ型
オブジェクト型を体系的に変換します:
type Partial<T> = { [P in keyof T]?: T[P] }
type Readonly<T> = { readonly [P in keyof T]: T[P] }
type Pick<T, K extends keyof T> = { [P in K]: T[P] }
型ガード
型の絞り込みを伴う実行時の型チェック:
function isString(value: unknown): value is string {
return typeof value === 'string'
}
function isSuccess(result: Result): result is Success {
return result.status === 'success'
}
ブランド型
型安全性を確保するための名目的な型を作成します:
type UserId = string & { readonly __brand: 'UserId' }
type PostId = string & { readonly __brand: 'PostId' }
function createUserId(id: string): UserId {
return id as UserId
}
判別可能なユニオン
網羅性チェックを備えた型安全なステートマシン:
type LoadingState =
| { status: 'idle' }
| { status: 'loading' }
| { status: 'success'; data: string[] }
| { status: 'error'; error: Error }
参考資料
リソース
コメント
Markdown 対応