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

Typescript 如何为函数类型添加额外参数且保留原参数名?

解决方案

核心问题原因

你之前用到的基于Cons/Push的元组操作是TypeScript 4.0版本发布前的旧实现方案,这类hack方法在处理元组时会丢失元组自带的参数标签(也就是你看到的参数名被替换为head/tail的问题)。

最简实现方案

TypeScript 4.0及以上版本支持带标签的元组展开语法,直接使用该特性即可完美保留原有函数的参数名,代码如下:

// 泛型说明:
// F: 原函数类型
// ExtraArg: 要追加的额外参数类型
// ReturnType: 新函数的返回值类型,默认继承原函数的返回值
type AppendArgumentToFunction<
  F extends (...args: any[]) => any,
  ExtraArg,
  ReturnType = ReturnType<F>
> = (...args: [...Parameters<F>, conf: ExtraArg]) => ReturnType;

使用示例

// 原函数类型
type Func1 = (id: string) => void;
// 转换后的函数类型
type Func2 = AppendArgumentToFunction<Func1, { extraArg: boolean }>;
// 最终Func2的类型为:(id: string, conf: { extraArg: boolean }) => void

如果需要自定义额外参数的名称,只需要修改元组中conf的标签名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:15:02