2017-09-23 5 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のコンストラクタを参照する便利な方法として使用されています。このコンストラクタは後で内部的に新しいインスタンスを作成するためにおそらく使用されます。

短いストーリーで、この関数はコンストラクタを必要とし、2番目の例で書いたように、そのインスタンスは作成しません。違いを確認する

することができます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'は、それ自体がコンストラクタのプロパティであるプロトタイプではなく、コンストラクタを参照します。 "prototype"/"proto"という言葉を "constructor"/"' ctor' "に置き換えてください。 – jcalz

+0

@jcalz確かに、ヘッドアップのおかげで! – cvsguimaraes

関連する問題