You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TypeScript中剩余参数可使用对象类型?附代码示例求解

关于TypeScript中FnParamsToArrayParams类型的解析

先看你给出的TypeScript类型代码:

export type FnParamsToArrayParams<T> = T extends (...args: infer A) => infer R
  ? (...args2: { [K in keyof A]: Array<A[K]> }) => R
  : never

为什么...args2用对象类型却符合TS规则?

这里的核心是元组类型的映射特性:

  • 从(...args: infer A)推断出的A是元组类型(函数的参数列表在类型层面会被表示为元组)。
  • 当对元组类型执行{ [K in keyof A]: Array<A[K]> }这类映射操作时,TypeScript不会将其视为普通对象,而是生成一个新的元组类型。比如A如果是[number, string],映射后的结果就是[Array<number>, Array<string>]——本质还是数组/元组,完全符合TypeScript对剩余参数必须是数组类型的要求。

关于“保留...args参数名称”的误解

这里的args只是类型定义里的占位符,用来辅助推断参数的类型集合A,它不会被保留到最终生成的类型中。最终类型里的参数名称是args2,和原来的args没有关联,不存在“保留参数名称”的逻辑。

举个实际例子:
假设我们有函数类型(id: number, name: string) => void,将其传入FnParamsToArrayParams后,得到的类型是(...args2: [number[], string[]]) => void,完全符合剩余参数的类型规则。

内容的提问来源于stack exchange,提问作者Znar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:58:09