我正在尝试使用System.js作为模块类型将RxJS 5导入到打字稿应用程序中。它几乎就在那里,但当我做的时候
import * as Rx from "path/to/rxjs/Rx";
Rx对象不直接包含Rx的模块内容,但有一个名为'default'的属性,它包含模块内容:
Rx.Observable.of(1,2,3) ... //does not work, Rx.Observable is undefined
Rx.default.Observable.of(1,2,3) ... //DOES work, and contains the module contents as expected
我的tsconfig看起来像这样:
{
"compilerOptions": {
"module": "system",
"allowSyntheticDefaultImports" : true,
"allowJs" : true,
"noImplicitAny": true,
"removeComments": false,
"preserveConstEnums": true,
"baseUrl" : "./",
"sourceMap": true,
"target": "es6",
"lib" : ["dom","es6","dom.iterable","scripthost","es2015","es2016"],
"strict": true,
"forceConsistentCasingInFileNames": true,
"outFile" : "./js/out.js"
},
"files": [
"main.ts"
]
}
我对system.js的调用如下所示:
System.config({
"baseURL" : "/",
packages: {
'../node_modules/rxjs': {
defaultExtension: 'js',
}
}
});
System.import("./js/out.js")
.then(() => {
console.log("js loaded");
System.import("main");
})
.catch((err)=> {
console.error("Error: " + err);
});
我怀疑这是我需要传递给system.js的配置变量,但跨模块系统导入的文档对新手来说并不是最有帮助的。我已经尝试将../node_modules/rxjs的包类型设置为'cjs'并且它具有相同的结果。
顺便说一句:对于Javascript来说,5个不同的模块系统(至少!)很疯狂。而且我认为Java Jigsaw brouhaha很糟糕。
答案 0 :(得分:0)
您要将path/to/rxjs/Rx
的所有导出导入新对象Rx
。
import * as Rx from "path/to/rxjs/Rx";
要改为导入模块的默认导出,请使用:
import Rx from "path/to/rxjs/Rx";