我可以使用扩展语法使用 TypeScript 制作包装函数,而无需指定参数和类型吗?
Posted
技术标签:
【中文标题】我可以使用扩展语法使用 TypeScript 制作包装函数,而无需指定参数和类型吗?【英文标题】:Can I make a wrapper function with TypeScript using spread syntax, without having to specify arguments and types? 【发布时间】:2020-07-01 15:12:17 【问题描述】:以下代码是在 javascript 中实现包装函数的一种常见且非常简洁的方式。
代码用包装器outerFunction
包装innerFunction
(有一些命名参数):
function innerFunction(firstArgument, secondArgument, thirdArgument)
console.log('innerFunction', arguments);
function outerFunction()
console.log('outerFunction', arguments);
innerFunction(...arguments)
outerFunction(1, 2, 3);
这和 JavaScript 一样工作得很好 - 你可以看到 outerFunction
将任何参数传递给 innerFunction
:
outerFunction [Arguments] '0': 1, '1': 2, '2': 3
innerFunction [Arguments] '0': 1, '1': 2, '2': 3
Typescript 不喜欢这样,因为它希望我将内部函数类型放入外部函数中。
在 TypeScript 中是否有更好的方法?肯定 TypeScript 的静态分析可以看到外部函数从内部函数获取其类型?
我接受答案可能是“不,您必须将内部函数的类型添加到外部函数”。但如果有更好的方法,我想在这里咨询一下我的同行。
【问题讨论】:
【参考方案1】:Typescript 提供了一个实用程序类型Parameters,它以元组的形式为您提供函数参数的类型。所以你可以像下面这样输入外部函数:
function innerFunction(firstArgument: string, secondArgument: number, thirdArgument: boolean)
console.log('innerFunction', firstArgument, secondArgument, thirdArgument);
function outerFunction(...args: Parameters<typeof innerFunction>)
console.log('outerFunction', ...args);
innerFunction(...args);
【讨论】:
我的错;编辑添加“typeof”,我认为应该这样做。以上是关于我可以使用扩展语法使用 TypeScript 制作包装函数,而无需指定参数和类型吗?的主要内容,如果未能解决你的问题,请参考以下文章