函数参数声明中的typeof关键字是什么意思?

时间:2017-09-23 13:12:11

标签: typescript

我在演示文稿中看到过如何在SAPUI5中使用Typescript,在示例代码中,它是这样的:

sap.ui.define(["sap/ui/core/UIComponent", "sap/m/Select"],
  function(UIComponent, Select: typeof sap.m.Select) {
    "use strict";
    // ...
});

此上下文中typeof关键字的含义是什么?为什么作者不是这样写的:

sap.ui.define(["sap/ui/core/UIComponent", "sap/m/Select"],
  function(UIComponent, Select: sap.m.Select) {
    "use strict";
    // ...
});

1 个答案:

答案 0 :(得分:3)

这是type query。在您提供的示例中,它被用作引用Select构造函数的便捷方式,稍后可能会在内部使用它来创建新实例。

长话短说,该函数需要它的构造函数而不是你在第二个例子中写的实例。

您可以load this snippet on TS playground查看差异:

class Foo {
    static fooNumber = 42
    fooString = 'foo'
}

function test(instance: Foo, ctor: typeof Foo) {
    console.log(instance.fooNumber) // Error
    console.log(instance.fooString)
    console.log(ctor.fooNumber)
    console.log(ctor.fooString) // Error

    let anotherInstance = new ctor()
    console.log(anotherInstance.fooNumber) // Error
    console.log(anotherInstance.fooString)
}