Search code examples
node.jstypescriptrxjsrxjs5tsc

RxJS5 TypeScript typings fail


I run tsc on my project, and I get these errors relating to the RxJS5 lib:

$ 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'.

does anyone know why this is happening? this is my package.json file:

{
  "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"
  }
}

Solution

  • You need to add "dom" to the lib setting in your tsconfig.json file's compilerOptions:

    "lib": ["dom", "es2015"]
    

    Alternatively, you can use the skipLibCheck compilerOption to avoid checking .d.ts files within node_modules:

    "skipLibCheck": true
    

    See this issue for an explanation.

    Basically, the fromEvent observable factory supports both Node and DOM event sources and TypeScript needs to know about the DOM types.

    This PR should resolve the problem.