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(普通调用签名不匹配)。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏