为什么tsc(Typescript编译器)忽略RxJS导入?

3
我使用 JSPM 和 SystemJS 设置了我的 Angular2 项目。我尝试在我的 boot.ts 文件中导入 RxJS 和一些运算符,但我的导入未被转译为 boot.js 输出。因此,
// boot.ts
import {Observable} from 'rxjs/Observable'
import 'rxjs/add/operator/debounceTime'
...

这里提到的内容如下:https://github.com/ReactiveX/RxJS#es6-via-npm 最终的结果是这样的。
// boot.js
System.register(['rxjs/add/operator/debounceTime', ...

tsc (尝试使用 1.7.5 和 1.8.0 版本):

// tsconfig.json
{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": true,
    "noImplicitAny": false,
    "module": "system",
    "moduleResolution": "node",
    "rootDir": "src",
    "target": "es5"
  }

  , "exclude": [
    "jspm_packages",
    "node_modules",
    "typings/main.d.ts",
    "typings/main"
  ]
}

我错过了什么吗???

更新

TypeScript只有在代码中稍后使用时才会发出导入。 我只需要额外的运算符来监听Angular2 控制valueChanges可观察对象。 然而,如果缺少rxjsObservable类,则无法修补附加运算符。 因此,您需要通过像这样导入来强制TypeScript为Observable 发出System.register

// boot.ts
import 'rxjs/Observable'
import 'rxjs/add/operator/debounceTime'
...

所有功劳归功于@RyanCavanaugh,他指导我正确的方向。


2
请参见 https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-imports-being-elided-in-my-emit - Ryan Cavanaugh
感谢您的迅速回复,import 'rxjs/Observable'解决了问题。 - TylerDurden
2个回答

1

0
你需要正确地导入Observable类:
import { Observable } from 'rxjs/Observable';

或者以下代码可同时包含所有操作符:

import { Observable } from 'rxjs/Rx';

我尝试过了,但是没有任何改变。问题在于 - 如维基所述 - 我在代码中后来没有使用Observable,因为我只是将运算符应用于Angular控件的valueChanges可观察对象。无论如何,感谢您的回答。 - TylerDurden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接