web-dev-qa-db-fra.com

Utilisation de RxJS avec TypeScript

J'ai un problème à essayer d'utiliser RxJS avec TypeScript et Node.js. J'utilise NPM et j'ai inclus rxjs-es version 5. J'utilise également Typings, et j'ai inclus les deux es6-shim et rx.all, ainsi:

{
  "ambientDependencies": {
    "es6-shim": "registry:dt/es6-shim#0.31.2+20160317120654",
    "rx.all": "registry:dt/rx.all#2.2.28+20160316155526"
  }
}

Ci-dessous est mon tsconfig.json fichier.

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "typings/browser",
    "typings/browser.d.ts"
  ]
}

Dans un fichier TypeScript, j'essaie de faire ce qui suit:

import { Observable } from 'rxjs/Observable';

Lorsque j'essaie de compiler le script, j'obtiens l'erreur suivante:

typings/main/ambient/rx.all/index.d.ts(10,11): error TS2304: Cannot find name 'Rx'.

Cela se produit même si j'essaie d'utiliser RxJS dans mon script ou non, le problème est donc lié aux typages TypeScript.

De quoi ai-je besoin pour installer à l'aide de typages et de NPM afin d'utiliser RxJS? En particulier, je suis intéressé par l'utilisation d'Observables. Après avoir googlé pendant des heures, je n'arrive pas à comprendre ce dont j'ai besoin pour le faire fonctionner. J'ai essayé ce qui suit , mais sans aucune chance. J'ai également essayé de nombreuses combinaisons de packages rx en NPM et en tapant, mais je n'ai rien trouvé qui fonctionne. Toute aide est très appréciée!

10
Andy0708

RxJS 5 est écrit en TypeScript et ses définitions de type sont incluses par défaut pour le module publié, vous n'aurez peut-être pas besoin de taper pour rx.all. En fait, ces définitions de types sont écrites pour les versions précédentes de RxJS. Désinstallez simplement rx.all définition de type et essayez d'importer sans ceux-ci.

14
OJ Kwon

La manière correcte d'accomplir cela pour Angular (pas AngularJS ) est d'utiliser @types à partir de npm. La commande est la suivante:

npm install @types/rx --save-dev

Pour plus d'informations, consultez npm .

6
Latin Warrior

En règle générale, vous n'avez pas besoin d'installer les saisies séparément, en incluant simplement rxjs/Rx dans votre projet devrait fonctionner (notez le nom du package):

// installed with `$ npm i rxjs`
import { Observable } from 'rxjs/Rx' // <- rxjs from NPM

Observable
    .of('Hello')
    .map( w => w + ' world!') // Annotated properly: (w: string) => string
    .subscribe(console.log.bind(console)) // 'Hello world!'

Ma .tsconfig (nœud)

Ne devrait pas être pertinent, mais n'hésitez pas à utiliser/comparer.

{
    "compilerOptions": {
        "target": "es2015",
        "module": "commonjs",
        "moduleResolution": "node",
        "sourceMap": true,
        "removeComments": false,
        "noImplicitReturns": true,
        "noImplicitAny": true,
        "preserveConstEnums": true
    },
    "exclude": [
        "logs",
        "node_modules"
    ]
}
2
Rafal Pastuszak

Vous pouvez installer des saisies pour RXJS en entrant ce qui suit dans votre CLI.

typings install --global dt~es6-shim --save

Cela ajoutera ce qui suit à votre typings.json"es6-shim": "registry:dt/es6-shim#0.31.2+20160602141504"

Ajoutez ensuite un chemin de référence en haut de votre fichier TypeScript

/// <reference path="typings/globals/es6-shim/index.d.ts" />`

ou à votre tsconfig.json.

Cela supprimera toutes les erreurs TypeScript.

1
Howard Panton

Ce fichier de dactylographie dépend de Rx:

declare module "rx.all" {
    export = Rx;
}

Essayez d'installer "rx" ainsi que "rx.all":

typings install rx --save --ambient

Mais notez que ces saisies supposent que vous importez "rx.all" ou "rx" afin que votre importation ne vous donne pas d'informations de frappe:

import { Observable } from 'rxjs/Observable';

Pouvez-vous importer à partir de "rx" au lieu de "rxjs"?

import { Observable } from 'rx';
1
Corey Alix