如何使用SystemJS和Angular使用Typescript?

时间:2014-11-11 06:24:42

标签: angularjs typescript commonjs systemjs

我试图使SystemJS与Typescript一起工作,但它们似乎相互冲突。

如何在没有与Typescript上的关键字冲突的情况下利用System.js中的自动加载?使用import / require使得Typescript使用它自己的方式来加载和引用文件,虽然它将export翻译为module.exports = ...,但它并没有对import做同样的事情。

是否有可能实现这一目标,或者我必须等待Typescript支持ES6关键字?

3 个答案:

答案 0 :(得分:6)

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

创作一个类:

export class Foo {}

然后用

编译
tsc --module system foo.ts

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

答案 1 :(得分:2)

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

import dep = require('dep');

console.log(dep);

编译时,传递模块标志:

tsc --module commonjs app.ts

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

输出如下:

var dep = require('dep');

console.log(dep);

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

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

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

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

答案 2 :(得分:0)

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

注意:更多是自我提醒或游乐场而不是适当的种子

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

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

我发现它就像来自其他语言和框架的构造函数注入模式,并且它总是转换为相同的Javascript,因为它是Javascript,用类和箭头函数进行美化(+使用类型的情况下使用Typescript来进行修改)。

同样选择amd显示出明显的异步意图,如果你选择让我们说ES6模块语法,那将是荣誉,因为导入语句只会在依赖关系加载完成后执行。非常像async关键字,对于非启动的

,它感觉有点过于神秘 BTW:和OutOFcontext:SA / JHB的干杯,以及SystemJS开发人员Bedford先生的惊人工作