2017-09-23 72 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

相關問題