2013-04-25 18 views
5

私はこれがtsは持っている場合はモジュール:活字体AMDの実装

export function say(){ 
    console.log("said"); 
} 

と私は、TSクライアントから非常に簡単にそれを使用することができますamdのオプションでそれをコンパイルします。

import foo = module("tsmodule") 
foo.say(); 

export var x = 123; 
私は、TSモジュールと同等のjavascriptがあれば

しかし:

define(["require", "exports"], function(require, exports) { 
    function say() { 
     console.log("said"); 
    } 
    exports.say = say; 
}) 

を簡単にそれを使用する方法はありません。最も簡単な解決策は:

// of course you can use .d.ts for requirejs but that is beside the point 
declare var require:any; 

// will fail with error module has not been loaded yet for context 
// http://requirejs.org/docs/errors.html#notloaded 
var useme = require("jsmodule") 
useme.say(); 

export var x = 123; 
import foo = module("tsmodule") 
foo.say(); 

エラーが原因http://requirejs.org/docs/errors.html#notloadedの失敗します。 "jsmodule"は生成されたtypescriptのdefine呼び出しに渡されなかったためです。

私は

  • を持つ2つの回避策は、インポート/エクスポートを使用していない(言語機能が失われた)
  • 使用は([])が必要です(まだ[必要に依存して何かを(エクスポートすることはできません。 ])コール)

制限:https://github.com/basarat/typescript-requirejsがあります。別の方法がありますか?そうでない場合は、あなたはここに投票することができます:https://typescript.codeplex.com/workitem/948 :)

答えて

3

をあなたは常に(ひどく文書化)amd-dependencyタグを使用することができ、JavaScriptのモジュールにロードする場合:

/// <amd-dependency path="jsmodule" /> 

これは、依存関係の配列にjsmoduleを置きますあなたの定義呼び出しの。

そしてあなたは単に

module useme { 
    function say(): void; 
} 
+1

明らかに文書化されていない機能を述べることになるで宣言ファイルを提供し、私のTSCバージョン0.9.0アルファでは動作しません。アンインストール/バージョン0.8にインストールしましょう – basarat

+0

Aww撮影、彼らは0.9でこれを削除しましたか?私は0.8.1.1を使用しています。 – thomaux

+2

0.8.3で動作します。しかし0.9.0アルファにはありません – basarat

関連する問題