2016-08-01 8 views
0

1)TypeScriptでは、グローバルレベルで定義されたすべてのクラスをどのように見つけることができますか?
2)どのようにスーパークラスでフィルタリングできますか?TypeScript/JavaScript:すべてのグローバルクラスをスキャンする方法(およびスーパークラスでフィルタリングする方法)?

モデルクラスはFrameModelです。 これらは実行時にはわかりません(プラガブル)。
FrameModelのサブクラスのリストを取得します。

これは私の試みです:私は問題を検討何

public static scan() 
{ 
    this.mapping = {}; 
    for (var i = 0; i < props.length; i++) { 
     var key = props[i]; 
     var val = window[key]; 
     console.log(`Key: ${key} Val: ${val} ${typeof val}`); 
     if (val == null) 
      continue; 
     if (typeof val !== 'function') 
      continue; 
     if (val.prototype == void 0) 
      continue; 
     if (val.prototype.constructor !== FrameModel) 
      continue; 
     this.mapping[key] == val; // Doesn't work 
    } 
} 

は次のとおりです。

  1. windowの使用 - のは、それがブラウザで実行されませんと言ってみましょう。それから私は一般的なグローバルオブジェクトが必要です。私はいくつかの文脈ではthisを使用していますが、グローバルオブジェクトを取得するためにオブジェクトの外で呼び出される関数ではIIRCが使用されています。それは「公式な」方法ですか?

  2. window[key]は動作しません - WindowそれはFunctionsだけではなく、Windowのすべての小道具をスキャンしFrameModel

  3. をTYPEOFに帰属ありません。 Functionのリストを取得するには、よりスマートな方法があると思います。

TypeScript 1.8。 Playground

+0

あなたはそれを行うことはできません、:https://nodejs.org/api/globals.html#globals_global

はtypescriptですためのWebPACKを設定しますか? –

+0

変更されました - 私はグローバルレベルで定義されたクラスのみを気にします。私は、型付きのクロージャで定義されたクラスを見たことがありません。どのように見えますか? –

+0

入手してください:https:// github。com/Microsoft/TypeScript/pull/3266 –

答えて

0

これらは実行時(プラガブル)前にはわかりません。

魅力的なイントロスペクションはJavaScriptではうまく機能しません。あなたは、一般的に、私は選択肢のDIフレームワークとしてhttps://github.com/inversify/InversifyJSに探してお勧めしますいくつかの依存関係の枠組み(例えば、角度が付いています1が明示的なコードによって駆動すなわちデコレータ)

をしたいです。ちょうどあなたの好奇心のため

もっと

ウィンドウの使用 - のは、それがブラウザで実行されませんと言ってみましょう。その後、私はあなたがglobal WebPACKのを使用する場合は、例えば束ねるときに自動的windowにそれを指すようになり、一般的な

でグローバルオブジェクトが必要:console.log(global); // Window。勿論、それはグローバルになりNodeJs中:私は閉鎖で私のクラスを定義した場合どのようなhttps://basarat.gitbooks.io/typescript/content/docs/quick/browser.html

関連する問題