Parameters<T> Parameters(含 ConstructorParameters/InstanceType)
最后更新:2026-10-22
Parameters<T> Parameters(含 ConstructorParameters/InstanceType)
Parameters<T> 取函数类型 T 的参数列表,结果是一个元组类型。有了它就能把"一组参数"整体存储、传递、转发,而不必手写 [string, number, string?] 这样的参数清单。
| 分组 | 工具类型 |
|---|---|
| 类型 | 类型 |
| 严格模式 | 不需要 |
ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。
📝 语法
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 的每个参数(含可选参数与剩余参数);T 不是函数类型时得到 never。
▶ 示例
修改下面的代码,点击试一试查看转译运行结果:
输出:
session(u-7, 3600s, default)
retry -> session(u-7, 60s, admin)
(转译后运行输出;类型层面:SessionArgs 是 [string, number, string?]——createSession 的签名改了,元组自动跟着改)
💡 要点
ℹ️ 说明 实现同样基于 infer:把参数列表捕获为元组 P。可选参数在元组里表现为 string?,剩余参数表现为 ...string[]。
⚠️ 注意 与 ReturnType 一样,对重载函数只取最后一个重载的参数列表。
💡 提示 同族工具:ConstructorParameters<T> 取构造函数参数、InstanceType<T> 取类实例类型、ThisParameterType<T> 取 this 类型。包装第三方 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(普通调用签名不匹配)。