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

TypeScript 如何将Parameters<函数>元组转换为带命名字段的对象类型

你要的LibParametersKeyed类型可以直接通过元组的索引访问实现,代码如下:

// 直接基于现有类型转换,和你预期的结构完全等价
type LibParametersKeyed = {
  data: LibFunctionParameters[0]
  opts?: LibFunctionParameters[1]
}

如果需要适配任意函数参数元组转命名对象,可以封装通用工具类型,后续扩展其他库方法时不需要重复写结构:

// 通用工具类型:第一个参数是函数参数元组,第二个参数是按顺序对应的key名称数组
type TupleToNamedObj<ParamTuple extends any[], KeyArr extends string[]> = {
  [K in KeyArr[number]]: K extends KeyArr[infer Index extends number] ? ParamTuple[Index] : never
}

// 调用工具类型生成你要的结构
type LibParametersKeyed = TupleToNamedObj<LibFunctionParameters, ['data', 'opts']>

实际使用示例

你定义的RunSet可以直接用生成的类型,调用第三方库时直接解构参数即可:

type RunSet = { foo: any } & LibParametersKeyed

// 实际调用逻辑
function execTask(task: RunSet) {
  // 拆分自定义字段和库入参
  const { foo, data, opts } = task
  // 直接传入第三方库方法,类型完全匹配
  return ExternalLibFunction(data, opts)
}

如果是针对xlsx库封装,针对read、write等不同方法,只需要替换ExternalLibFunction为对应的库方法类型,就能自动同步参数类型,不需要手动修改LibParametersKeyed的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:09:04