9

我正在尝试使 SystemJS 与 Typescript 一起使用,但它们似乎相互冲突。

如何利用 System.js 的自动加载而不与 Typescript 上的关键字冲突?使用 import / require 使 Typescript 使用它自己的方式来加载和引用文件,虽然它翻译exportmodule.exports = ...,但它对import

是否有可能实现这一点,或者我将不得不等待 Typescript 支持 ES6 关键字?

4

3 回答 3

6

TypeScript 1.5 添加了对编译为 ES5 SystemJS 模块语法的支持。

编写一个类,如:

export class Foo {}

然后编译

tsc --module system foo.ts

结果将是一个使用 SystemJS 格式的 ES5 模块。

于 2015-06-09T15:05:19.640 回答
2

在 TypeScript 中,您将编写以下导入语句...

import dep = require('dep');

console.log(dep);

编译时,传递模块标志:

tsc --module commonjs app.ts

这告诉 TypeScript 以 CommonJS 样式模块为目标(如果需要,它也可以针对 AMD - SystemJS 支持这两种语法样式)。

输出如下所示:

var dep = require('dep');

console.log(dep);

此输出类似于SystemJS 文档中的以下示例。

// library resource
var $ = require('jquery'); // -> /lib/jquery.js

// format detected automatically
console.log('loaded CommonJS');

如果您需要更多帮助,您可以提出问题并附上说明问题的具体示例,我们将能够提供更具体的建议。

于 2014-11-11T08:20:36.727 回答
0

你可以在这里看到我使用 traceur 而不是 Typescript 的方式,但它应该与 Typescript 几乎相同,一旦我可以再次使用它,我会添加 ts。

注意:与其说是种子,不如说是自我提醒或游乐场

正如史蒂夫提到的 SystemJs 的最强点是你可以使用几乎任何模块定义,加载器应该检测模块格式,我个人更喜欢将模块声明为

define([deps...],(deps..){
    // ...
})

我发现它就像来自其他语言和框架的构造函数注入模式,它总是转换为相同的 Javascript,因为它是 Javascript ,用类和箭头函数美化(+用类型注释的类型,例如 Typescript)。

还选择 amd 清楚地显示了异步意图,如果您选择让我们说 ES6 模块语法,那将是一种荣誉,因为 import 语句之后的代码只会在依赖项完成加载时执行。非常像 async 关键字,对于未启动的人来说感觉有点太神秘了

顺便说一句:和 OutOFcontext:SA / JHB 为 SystemJS 开发人员 Bedford 先生的出色工作干杯

于 2014-11-12T06:11:45.807 回答