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

Why does tsc (Typescript Compiler) ignore RxJS import?

我已经使用 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 只会 emit 如果稍后在代码中使用导入。我只需要额外的运算符来监听 Angular2 controlvalueChanges observable。但是,如果缺少 rxjsObservable class,则无法修补其他运算符。因此,您需要通过像这样导入来强制 TypeScript emit System.register for Observable

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

所有功劳都归功于@RyanCavanaugh,他为我指明了正确的方向。

您需要以正确的方式导入 Observable class:

import { Observable } from 'rxjs/Observable';

如果您想同时包含所有运算符,则执行以下操作:

import { Observable } from 'rxjs/Rx';

来自评论的回答,成功解决了问题:

import 'rxjs/Observable'

参考:https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-imports-being-elided-in-my-emit