通过typescript中的System.js导入RxJS

时间:2017-08-20 03:47:13

标签: javascript typescript module rxjs

我正在尝试使用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很糟糕。

1 个答案:

答案 0 :(得分:0)

您要将path/to/rxjs/Rx的所有导出导入新对象Rx

import * as Rx from "path/to/rxjs/Rx";

要改为导入模块的默认导出,请使用:

import Rx from "path/to/rxjs/Rx";