基本上我有这个功能:
function portable(func) {
return function(...args) {
if (typeof this === undefined) {
return func(...args)
} else {
return func(this, ...args)
}
}
}
我想向其中添加类型,以便此功能的类型:
const add = portable((x: number, y: number): number => x + y)
可以正确推断为这两种类型的结合:
(this: undefined, x: number, y: number) => number
(this: number, y: number) => number
我在类型系统中要求的是什么?如果是这样,任何人都可以给出一种表达这种类型的方式?
我相信,根据我发现这个问题的几个小时的研究,目前是不可能的。
有效地,即使已知参数,我似乎也无法捕获函数参数的类型,实际上我无法以任何可能的方式表示它:
function addUselessArg(func) {
return function(first: 'Banana', ...args) {
return func(...args)
}
}
很明显,addUselessArg((x: number) => x**2)
的类型是(first: 'Banana', x: number) => number
,但是如果没有能够指定Variadic参数args
的类型为func
的参数类型。