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。