T = Default ジェネリックのデフォルト型
最終更新:2026-10-22
T = Default ジェネリックのデフォルト型
型パラメータにはデフォルト値を付けられます(<T = string>)。指定しなければデフォルト型が採用され、指定すればその値が使われます。関数のデフォルト引数と同じ発想です——「よくある場面は設定不要、特別な場面は上書き可能」で、ジェネリック API がより扱いやすくなります。
| グループ | ジェネリクス |
|---|---|
| 種類 | 構文 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
interface Paginated<T = string, Page = number> {
page: Page;
items: T[];
}
const names: Paginated = { page: 1, items: ["ann", "bob"] }; // デフォルトを使用
const orders: Paginated<{ id: number; total: number }> = { page: 2, items: [] }; // T を上書き
⚙️ パラメータ
| T = string | デフォルト値付きの型パラメータ:使用箇所で完全に省略できます |
|---|---|
| Page = number | 2番目のパラメータにもデフォルト値があります。Page を上書きするときは、位置のルール上 T も連れて書く必要があります |
戻り値:デフォルト値は「実引数を省略したときにどの型を使うか」にのみ影響します。実体化された型の振る舞いは明示的に指定した場合と完全に同じです。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
ann,bob 2 7
(トランスパイル後の実行出力。orders.items に文字列を入れるとコンパイルエラーになります——T は注文オブジェクトに上書きされています)
💡 ポイント
ℹ️ 説明 デフォルト値には任意の型式を書けます。具体型(string)、別のパラメータ(T = Page[])、条件型さえも——デフォルト値自体が型の演算を行えます。
⚠️ 注意 型パラメータは位置で埋められます。2番目の Page を上書きしたいときは、1番目の T も必ず書く必要があります(そのデフォルトのプレースホルダでも可)。
💡 ヒント 公開ライブラリのジェネリック型はほぼすべてデフォルト値を持つべきです(Paginated<T = unknown> など)。初心者は型パラメータを理解しなくても始められ、上級者はいつでも正確に指定できます。
🏷️ 関連ジェネリクス
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q デフォルト値と制約を一緒に使うときの作法は?
A デフォルト値は制約を満たす必要があります。<T extends HasId = User> は合法(User は HasId と互換)で、<T extends HasId = string> はエラーです。デフォルト値は「フォールバックの具体型」、制約は「准入の門」です。
Q ジェネリッククラスのデフォルト値はいつ発動しますか?
A new Stack() が実引数なしで、推論の材料もないときです。class Stack<T = string> の new Stack() は Stack<string> になります。コンストラクタに実引数を渡した場合は推論がデフォルトより優先されます。
Q デフォルト値は前の型パラメータを参照できますか?
A できます。interface Pair<K = string, V = K[]> ——V のデフォルトは K の配列です。参照は「すでに宣言された」方向にしか向けられず、逆はできません。