如果我有这个ts模块:

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

我使用amd选项进行编译,可以从ts客户端轻松使用它:
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调用。

我有两个解决方法
  • 不使用导入/导出(丢失语言功能)
  • 使用require([])(仍然无法导出依赖于require([])调用的内容)

  • 有限制:https://github.com/basarat/typescript-requirejs。还有另一种方法吗?如果不能,您可以在这里投票:https://typescript.codeplex.com/workitem/948 :)

    最佳答案

    如果要加载JavaScript模块,则可以始终使用(文献不充分的)amd-dependency标记:

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

    这会将jsmodule放入您的define调用的依赖项数组中。

    然后提供一个声明文件,您只需在其中声明
    module useme {
        function say(): void;
    }
    

    关于requirejs - Typescript AMD实现对Javascript/RequireJS不利,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16213406/

    10-12 15:17