2013-04-25 39 views
5

如果我有這樣的TS模塊:打字稿AMD執行不好的JavaScript/RequireJS

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

,我採用了AMD選項編譯它,我可以從一個TS客戶很容易地使用它:

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

export var x = 123; 

但是,如果我有JavaScript相當於ts模塊:

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」沒有傳遞給生成的打印稿中的define調用。

兩個解決方法我有

  • 不使用導入/導出(語言功能喪失)
  • 使用要求([])(尚不能導出的東西,依賴於要求([ ])呼叫)

有限制:https://github.com/basarat/typescript-requirejs。有另一種方法嗎?如果沒有,你可以投票在這裏:https://typescript.codeplex.com/workitem/948 :)

回答

3

如果你想要一個JavaScript模塊加載你總是可以使用(嚴重記錄)amd-dependency標籤:

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

這將使jsmodule依賴陣列你定義的電話。

,然後提供一個聲明文件中,你會簡單地陳述

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

顯然無證功能,並且不與我的TSC版本0.9.0阿爾法工作。讓我卸載/安裝到版本0.8 – basarat 2013-04-25 12:12:59

+0

Aww拍攝,他們刪除了這個0.9?!我使用0.8.1.1。 – thomaux 2013-04-25 12:20:09

+2

在0.8.3中工作。但不是在0.9.0alpha – basarat 2013-04-25 12:47:51