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

能否将TypeScript的Parameters<>元组类型转换为Record类型?

从TypeScript参数类型生成对应Record类型

给定示例函数:

function foo(x: number, y: number) {}

你希望实现RecordFromTuple类型,让RecordFromTuple<Parameters<typeof foo>>等价于{ x: number, y: number },但这里存在TypeScript类型系统的核心限制:

核心限制说明

Parameters<typeof foo>返回的是命名元组类型[x: number, y: number],但元组的命名元素只是语法层面的可读性提示,并没有在类型系统中作为可访问的键存在。该元组的类型键仅包含数字索引(0、1)、数组内置属性(如length)等,无法直接提取x、y这些参数名作为Record的键。

可行替代方案

如果你的核心需求是将函数参数转换为键值对类型,可以跳过Parameters,直接从函数类型出发实现类型转换:

固定参数数量场景

如果函数参数数量固定,可直接通过infer提取每个参数的类型并映射为Record:

// 辅助类型:支持2个参数的函数转换
type ParamsToRecord<F extends (...args: any[]) => any> = 
  F extends (x: infer X, y: infer Y) => any 
    ? { x: X, y: Y } 
    : never;

// 使用示例
type FooParamsRecord = ParamsToRecord<typeof foo>;
// FooParamsRecord 等价于 { x: number, y: number }

通用场景说明

遗憾的是,目前TypeScript无法动态提取任意数量的函数参数名称作为类型键(类型系统不跟踪参数名称)。如果需要支持任意数量的参数,只能通过手动定义参数名与类型的映射关系来实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:10:55