尝试声明一个函数必须调用void(undefined
,null
或global
)。并发现了一件有趣的事情。在使用this: void
声明函数时,可以使用任何this
调用它,但如果我添加一些具体类型,例如this: void | Function
(但它不适用于null
,{{ 1}},undefined
)它开始检查any
。
Code:
this
我不明白var x = { f: function (this: void) { } };
x.f(); // Ok - why???
(0 as any, x.f)(); // Ok
var y = { f: function (this: Window) { } };
y.f(); // Error
(0 as any, y.f)(); // Error
var z = { f: function (this: void | Window) { } };
z.f(); // Error
(0 as any, z.f)(); // Ok
var a = { f: function (this: void | null) { } };
a.f(); // Ok
(0 as any, a.f)(); // Ok
var b = { f: function (this: void | Function) { } };
b.f(); // Error
(0 as any, b.f)(); // Ok
var c = { f: function (this: void | (string & number)) { } };
c.f(); // Error
(0 as any, c.f)(); // Ok
在这里如何运作。
答案 0 :(得分:0)
li
是非常奇怪的类型
void
在您的示例中,如果所有var a:void = undefined; // ok
var b:undefined = a; // incompatible
类型都替换为void
,则一切都按预期工作