15

看起来 TypeScript 有一个不错的模块系统,但这是否取代了对 requirejs 之类的需求?换句话说,当你“编译”一个 typescript 包时,它会为你处理所有依赖解析吗?示例将不胜感激!

4

3 回答 3

16

TypeScript 没有运行时模块加载器。您仍然需要提供一个在运行时使用的模块加载器,例如 require js。TypeScript 支持生成与 commonJS(用于 node.js 脚本)和 AMD 加载器(例如 requireJS)兼容的 JavaScript 代码。要指定使用哪一个,请使用“amd”或“commonjs”将“--module”切换到编译器。

以下是在 TypeScript 中导出模块的方法:

export module depModule { 
    export class A { 
    }
}

这是使用 --module amd 开关生成的 JavaScript 代码:

define(["require", "exports"], function(require, exports) {
    (function (depModule) {
        var A = (function () {
            function A() { }
            return A;
        })();
        depModule.A = A;
    })(exports.depModule || (exports.depModule = {}));
})
于 2012-10-03T19:07:20.533 回答
3

TypeScript 可以生成适用于 AMD 兼容的依赖加载器(如 requirejs)或 commonjs 环境(如 Node.js)的代码。您可以使用编译器的 --module 选项来控制它。编译器本身不会在运行时处理依赖关系解析,这取决于您的工作,但它会尝试在编译时解析依赖关系,以便它可以为您提供类型信息。

您可以在 CodePlex 的测试目录中看到使用模块的项目示例,例如这个。编译这些测试项目的输出是 .js 文件,可以使用例如 requirejs(如果您通过 --module amd)或 Node(如果您通过 --module commonjs)加载。

于 2012-10-03T19:11:12.870 回答
2

如果您的应用程序仅由 typescript 模块/文件组成,则可以不使用模块加载器或其他依赖项管理。您需要将所有依赖项包含在注释引用中,并使用编译器的 --out 选项。例如:

tsc --out compiled.js app.ts

这会将 app.ts 及其所有依赖项(包括依赖项的依赖项)生成的 js 放入compiled.js。然后可以将生成的文件直接包含在带有 script 标签的 html 文件中。也可以缩小。不支持在运行时加载模块

于 2012-10-04T18:46:58.090 回答