【发布时间】:2017-05-05 14:42:18
【问题描述】:
基本上我有这个功能:
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
在类型系统中我要问的可能吗?如果是这样,任何人都可以给出表达这种类型的方法吗?
【问题讨论】:
-
我不确定这是否符合您的想法。
func将始终在将this设置为undefined的情况下调用。 -
你为什么想要一个工会?重载声明似乎更符合人体工程学。
-
重载和联合有什么区别?就像
(x) => typeof x === 'number' ? x : 'foo'的类型本质上不是(x: number) => number和(x: any) => string的联合吗? -
Mike 就是这个想法,装饰的 func 不使用它,但装饰器返回的函数使用,我指的类型是装饰 func 的类型,但
(x: number, y: number) => number是未修饰函数的类型,但是如果我将其附加到对象并将其作为方法调用,则可移植返回的函数可以具有未定义的 this。
标签: typescript this decorator type-inference union-types