Typescript 映射函数类型时保留参数名称

Typescript 映射函数类型时保留参数名称,typescript,Typescript,假设我要映射函数的结果: (bob: Bob) => R => (bob: Bob) => R2 在保持参数名称不变的情况下,有什么方法可以做到这一点吗?(例如bob而不是像a这样的通用名称)如果要保留代码完成显示的参数名称,则无法确保保留这些名称。映射参数的最佳方法是使用元组和。由于元组是位置的,因此理论上,元组中的每个项都没有名称(只有位置才重要) 也就是说,typescript确实保留了参数的原始名称。如果使用该功能映射函数,它只是不一致地显示此信息。举个例子: c

假设我要映射函数的结果:

(bob: Bob) => R
  =>
(bob: Bob) => R2

在保持参数名称不变的情况下,有什么方法可以做到这一点吗?(例如
bob
而不是像
a
这样的通用名称)

如果要保留代码完成显示的参数名称,则无法确保保留这些名称。映射参数的最佳方法是使用元组和。由于元组是位置的,因此理论上,元组中的每个项都没有名称(只有位置才重要)

也就是说,typescript确实保留了参数的原始名称。如果使用该功能映射函数,它只是不一致地显示此信息。举个例子:

class Bob { }
let fn : (bob: Bob) => string

type Arguments<T extends (...a:any[])=> any> = T extends (...a:infer A)=> any ? A: []
function trasform<T extends (...a: any[]) => any>(inFn: T): (...a: Arguments<T>) => number {
  return null as any;
}

let fnOut = trasform(fn);

fnOut(new Bob)
类Bob{}
让fn:(bob:bob)=>字符串
类型参数any>=T扩展(…a:推断a)=>any?A:[]
函数trasform any>(inFn:T):(…a:参数)=>数字{
返回空值,如有;
}
释放fn=变换形式(fn);
fnOut(新鲍勃)

如果将鼠标悬停在
fnOut
上,您将看到原始名称:

如果打开
),您将只看到元组类型:


还有一个与此行为相关的GitHub,如果您想要改进,我建议您将其升级。

如果您要保留代码完成显示的参数名称,那么就没有办法确保这些名称被保留。我们映射参数的最佳方法是使用元组。因为元组是位置理论上,它们对元组中的每个项都没有名称(只有位置重要)

也就是说,typescript确实保留了参数的原始名称。如果使用该功能映射函数,它只是不一致地显示此信息。例如:

class Bob { }
let fn : (bob: Bob) => string

type Arguments<T extends (...a:any[])=> any> = T extends (...a:infer A)=> any ? A: []
function trasform<T extends (...a: any[]) => any>(inFn: T): (...a: Arguments<T>) => number {
  return null as any;
}

let fnOut = trasform(fn);

fnOut(new Bob)
类Bob{}
让fn:(bob:bob)=>字符串
类型参数any>=T扩展(…a:推断a)=>any?a:[]
函数trasform any>(inFn:T):(…a:参数)=>数字{
返回空值,如有;
}
释放fn=变换形式(fn);
fnOut(新鲍勃)

如果将鼠标悬停在
fnOut
上,您将看到原始名称:

如果打开
),您将只看到元组类型:


还有一个与此行为相关的GitHub,如果您想要此改进,我建议将其升级。

我对这个问题很困惑。您能详细说明吗?给我们一些更大的例子吗?我对这个问题很困惑。您能详细说明吗?给我们一些更大的例子吗?这正是我的问题,是的。我使用了类似的东西这个:类型MappedReturn=F extends()=>inferr?()=>R2:etc我使用了你的元组技巧,它的工作原理和你说的一模一样。干杯,希望这个错误得到修复。这正是我的问题,是的。我使用的是这样的东西:类型MappedReturn=F extends()=>inferr?()=>R2:等一下,我用了你的元组技巧,它的工作原理和你说的一模一样。干杯,希望这个错误得到修复。