`this`必须是`void`

时间:2018-01-14 22:41:17

标签: typescript void

尝试声明一个函数必须调用void(undefinednullglobal)。并发现了一件有趣的事情。在使用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 在这里如何运作。

1 个答案:

答案 0 :(得分:0)

li是非常奇怪的类型

void

在您的示例中,如果所有var a:void = undefined; // ok var b:undefined = a; // incompatible 类型都替换为void,则一切都按预期工作