RxJS5 TypeScript 打字失败

Ale*_*lls 4 node.js rxjs typescript tsc rxjs5

我在我的项目上运行tsc,并收到与 RxJS5 库相关的这些错误:

$ tsc
node_modules/rxjs/observable/FromEventObservable.d.ts(11,39): error TS2304: Cannot find name 'EventTarget'.
node_modules/rxjs/observable/FromEventObservable.d.ts(11,103): error TS2304: Cannot find name 'NodeList'.
node_modules/rxjs/observable/FromEventObservable.d.ts(11,114): error TS2304: Cannot find name 'HTMLCollection'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(16,23): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(77,59): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(82,13): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(97,20): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(98,10): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(108,32): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(108,44): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(119,10): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(128,39): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/AjaxObservable.d.ts(136,22): error TS2304: Cannot find name 'XMLHttpRequest'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(10,29): error TS2304: Cannot find name 'MessageEvent'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(11,33): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(12,34): error TS2304: Cannot find name 'CloseEvent'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(15,63): error TS2304: Cannot find name 'WebSocket'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(27,13): error TS2304: Cannot find name 'WebSocket'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(28,32): error TS2304: Cannot find name 'Event'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(29,33): error TS2304: Cannot find name 'CloseEvent'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(32,63): error TS2304: Cannot find name 'WebSocket'.
node_modules/rxjs/observable/dom/WebSocketSubject.d.ts(36,23): error TS2304: Cannot find name 'MessageEvent'.
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么会发生这种情况?这是我的 package.json 文件:

{
  "name": "oplog.rx",
  "version": "0.0.101",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "suman test"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/ORESoftware/oplog.rx.git"
  },
  "keywords": [
    "oplog",
    "mongodb",
    "rx",
    "rxjs"
  ],
  "author": "Olegzandr V.D.",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/ORESoftware/oplog.rx/issues"
  },
  "homepage": "https://github.com/ORESoftware/oplog.rx#readme",
  "dependencies": {
    "bson": "^2.0.4",
    "json-stdio": "0.0.1016",
    "mongodb": "^3.0.4",
    "rxjs": "^5.5.7"
  },
  "devDependencies": {
    "@types/mongodb": "^3.0.8"
  }
}
Run Code Online (Sandbox Code Playgroud)

car*_*ant 12

您需要添加"dom"到文件lib中的设置:tsconfig.jsoncompilerOptions

"lib": ["dom", "es2015"]
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用skipLibCheck compilerOption来避免检查.d.ts中的文件node_modules

"skipLibCheck": true
Run Code Online (Sandbox Code Playgroud)

请参阅此问题以获取解释。

基本上,fromEvent可观察工厂支持 Node 和 DOM 事件源,并且 TypeScript 需要了解 DOM 类型。

此 PR应该可以解决问题。