说我想映射一个函数的结果:
(bob: Bob) => R
=>
(bob: Bob) => R2
有什么方法可以保持参数名称完整吗? (例如,bob
而不是a
这样的通用名称)
答案 0 :(得分:2)
如果您要保留代码完成显示的参数名称,则没有任何可靠的方法来确保保留这些名称。映射参数的最佳方法是将元组与tuples in rest parameters feature in 3.0一起使用。由于元组是位置元组,因此从理论上讲,它们没有元组中每个项目的名称(只有位置很重要)。
也就是说,如果您使用功能映射功能,打字稿确实会保留参数的原始名称,只是不会始终显示此信息。以这个例子为例:
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)
如果您将鼠标悬停在fnOut
上,则会看到原始名称:
如果您打开(
,则只会看到元组类型:
还有一个与此行为有关的GitHub issue,如果您希望对此进行改进,我建议您对其进行投票。