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!
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.
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!'
.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"
]
}
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.
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';