我试图使SystemJS与Typescript一起工作,但它们似乎相互冲突。
如何在没有与Typescript上的关键字冲突的情况下利用System.js中的自动加载?使用import / require使得Typescript使用它自己的方式来加载和引用文件,虽然它将export
翻译为module.exports = ...
,但它并没有对import
做同样的事情。
是否有可能实现这一目标,或者我必须等待Typescript支持ES6关键字?
答案 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先生的惊人工作