2013-04-25 57 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