2017-09-23 48 views
0

我已经看到了一个演示如何使用打字稿与SAPUI5,并在示例代码,它是这样的:函数参数声明中的typeof关键字是什么意思?

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"; 
    // ... 
}); 

回答

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) 
} 
+1

好像你正在治疗的话“原型”和“构造”可以互换,但它们是不同的。 'typeof Foo'指的是构造函数,而不是原型,它本身就是构造函数的一个属性。我认为你应该用“构造函数”/“'ctor'”替换“prototype”/“'proto'”。 – jcalz

+0

@jcalz确实,感谢您的提醒! – cvsguimaraes

相关问题