Typescript 一个类型修饰符如何正确推断类型?

Typescript 一个类型修饰符如何正确推断类型?,typescript,this,decorator,type-inference,union-types,Typescript,This,Decorator,Type Inference,Union Types,基本上我有这个功能: function portable(func) { return function(...args) { if (typeof this === undefined) { return func(...args) } else { return func(this, ...args) } } } const add = portable((x: number,

基本上我有这个功能:

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)
我想向其添加类型,以便此函数的类型:

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)的类型是
(第一个:'Banana',x:number)=>number
但如果不能将变量参数
args
的类型指定为
func
的参数类型,则似乎无法实现这一点。

我不确定这是否符合您的想法
func
将始终在
this
设置为
undefined
的情况下调用。查看为什么需要联合?超负荷声明似乎更符合人体工程学。超负荷声明和联合声明有什么区别?Like不是这个
(x)=>typeof x=='number'的类型吗?x:'foo'
本质上只是
(x:number)=>number
(x:any)=>string
?Mike就是这个想法,修饰函数不使用它,但是修饰函数返回的函数使用它,我指的类型是修饰函数的类型,但是
(x:number,y:number)=>number
是未修饰函数的类型,但是如果我将其附加到对象并将其作为方法调用,则从portable返回的函数可能具有未定义的this。