Parameters<T> Parameters(ConstructorParameters/InstanceType を含む)
最終更新:2026-10-22
Parameters<T> Parameters(ConstructorParameters/InstanceType を含む)
Parameters<T> は関数型 T のパラメータのリストを取り、結果はタプル型になります。これがあれば「引数の束」を丸ごと格納、受け渡し、転送でき、[string, number, string?] のようなパラメータのリストを手書きする必要がありません。
| グループ | ユーティリティ型 |
|---|---|
| 種類 | 型 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
type Parameters<T extends (...args: any) => any> =
T extends (...args: infer P) => any ? P : never;
// 使い方
type SessionArgs = Parameters<typeof createSession>; // [string, number, string?]
⚙️ パラメータ
| T | 関数型です。実務ではほぼ常に typeof fn で得られた型です |
|---|
戻り値:タプル型です。T の各パラメータ(オプショナルパラメータと rest パラメータを含む)に順に対応します。T が関数型でなければ never になります。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
session(u-7, 3600s, default)
retry -> session(u-7, 60s, admin)
(トランスパイル後の実行出力。型レベルでは SessionArgs は [string, number, string?] です。createSession のシグネチャを変えれば、タプルも自動的に追従します)
💡 ポイント
ℹ️ 説明 実装も同様に infer に基づき、パラメータのリストをタプル P として捕まえます。オプショナルパラメータはタプルの中では string? として現れ、rest パラメータは ...string[] として現れます。
⚠️ 注意 ReturnType と同様に、オーバーロードされた関数では最後のオーバーロードのパラメータのリストだけが取られます。
💡 ヒント 同族のツールには、コンストラクタのパラメータを取る ConstructorParameters<T>、クラスのインスタンス型を取る InstanceType<T>、this の型を取る ThisParameterType<T> があります。サードパーティの API をラップするとき、この一式が非常に役立ちます。
🏷️ 関連ユーティリティ型
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q Parameters で取ったタプルをそのまま展開して呼び出せますか?
A できます。これこそ代表的な使い方です。createSession(...args) のように。TS はタプルに基づいて位置、個数、型をすべてチェックし、多くても少なくてもエラーになります。
Q Parameters の結果にパラメータを追加するには?
A タプルは連結できます。type Logged<P extends any[]> = [...P, requestId: string] のように。Parameters と組み合わせれば「元の引数+追加項目」の新しい関数シグネチャが作れ、デコレータやミドルウェアで定番の技です。
Q Parameters<typeof Class> は使えますか?
A クラス自体がコンストラクタであり、typeof Class の型にはコンストラクトシグネチャが付いています。コンストラクタの引数を取りたいなら専用の ConstructorParameters<typeof Class> を使うべきで、普通の Parameters は never を返します(通常の呼び出しシグネチャに合致しないため)。