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

时间:2018-11-12 16:52:16

标签: typescript

说我想映射一个函数的结果:

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

有什么方法可以保持参数名称完整吗? (例如,bob而不是a这样的通用名称)

1 个答案:

答案 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)

Playground link

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

如果您打开(,则只会看到元组类型:

还有一个与此行为有关的GitHub issue,如果您希望对此进行改进,我建议您对其进行投票。