2016-04-05 16 views
0

extendという静的プロパティを持つプレーンなjavascriptコンストラクタ関数があるとします。このメソッド(extend)に文字列を渡すと、ウィンドウオブジェクトに新しいコンストラクタ関数が作成されます。ここで呼び出されたときにグローバル名前空間を汚染する関数の場合

はその実装である:ここでhttps://canjs.com/docs/can.Construct.extend.html

は私のタイプの定義である:

declare module "can/construct/" { 

    interface ConstructFactory { 
     new(): Construct; 
    } 

    class Construct { 
     constructor(); 
     static extend(name: string): ConstructFactory; 
     static extend(name: string, staticProperties: {}): ConstructFactory; 
     static extend(name: string, staticProperties: {}, instanceProperties: {}): ConstructFactory; 
     static extend(staticProperties: {}, instanceProperties: {}): ConstructFactory; 
     static extend(instanceProperties: {}): ConstructFactory; 
    } 
} 

マイtypescriptファイルは次のようになります。

import {Construct} from "can/construct/"; 
Construct.extend('Foo'); 
let foobar = new Foo(); 

しかし、私はエラーを取得: TS2304: Cannot find name 'Foo'.

extendメソッドでFooが作成されたことをtypescriptに知らせるにはどうすればよいですか?

答えて

2

how can i letting typescript know that Foo is created in the extend method

あなたはが呼び出されたときには、グローバル名前空間を汚染することを関数を宣言することはできません。それは悪い考えのように感じるので、はTypeScriptでサポートされているとは思えません。

注:は、のコンストラクタ変数を返す関数を宣言することができます。しかし、これはあなたが求めている質問ではありません。

+0

「あなたのためにコンストラクタ変数を返す関数を宣言できますか?」 – JuKe

+0

私の最後のコメントについてのご意見はありますか? – JuKe

関連する問題