typescript - ¿faltan algunos operadores de RxJS en el proyecto CLI de Angular2? ¿Qué hacer?
Estoy en el proceso de aprender RxJS y constantemente trato muchos operadores y combinaciones que encuentro interesantes.
Estoy aprendiendo de aquí: http://reactivex.io/documentation/operators.html y aquí.
Tengo un proyecto Angular2 rc4 CLI, así que estoy usando Typescript. RxJS es: 5.0.0-beta.6
El problema:
Descubrí que algunos operadores no están presentes en el Observable.
Por ejemplo: quiero crear un observable que devuelva uno por uno los pares clave-valor de un objeto: Puedes ver cómo se ve la implementación, ya que la he tomado de aquí.
// Using Standard JavaScript
var obj = {
foo: 42,
bar: 56,
baz: 78
};
var source = Rx.Observable.pairs(obj);
var subscription = source.subscribe(
function (x) {
console.log('Next: %s', x);
},
function (err) {
console.log('Error: %s', err);
},
function () {
console.log('Completed');
});
// => Next: ['foo', 42]
// => Next: ['bar', 56]
// => Next: ['baz', 78]
// => Completed
Pero así es como se ve mi editor:
no hay IntelliSense para Observable.pairs()..
Basado en este post, he agregado las 2 importaciones:
import {Observable} from "rxjs/Rx";
import 'rxjs/Rx'; // import all operators and stuff. it's not good practice i know, but only for this example
Y traté de instalar más definiciones de tipos para rxjs de las que proporciona Angular CLI, pero no está funcionando:
typings install --save --ambient npm:rx/ts/rx.all.d.ts // Unable to resolve "npm:rx/ts/rx.all.d.ts" from "rx"
or
typings install rxjs // Unable to find "rxjs" ("npm") in the registry.
Y también intenté usar:
import * as Rx form 'rxjs/Rx'
myObjProperties$ = Rx.Observable.pairs(myObj) // still doesn't work, same error.
Y además, no puedo explicar por qué imprimir el objeto Observable en la consola no funciona... Obtengo un string-function que es inútil. Nada de prototipos.
console.log('TheAllmightyObservable : ', Observable) // i get:
// TheAllmightyObservable : function Observable(subscribe) {
// this._isScalar = false;
// if (subscribe) {
// this._subscribe = subscribe;
// }
// }
Tengo el mismo problema con muchos otros operadores: ofObjectChanges, ofArrayChanges, ofWithSkeduler, pairs - algunos de ellos no son tan importantes - pero me molesta cuando encuentro un operador de RxJs que es muy útil, y no puedo usarlo en un proyecto de Angular2 CLI.
Preguntas:
¿Qué tiene que ver Angular2 con RxJS? (supongo que me falta la visión general..) - ¿hay una lista separada de operadores angular2-rxjs o RxJS es un paquete completamente separado, y puede usarse como jQuery por ejemplo? Me refiero a que no haya una interferencia extraña entre los dos, que no pueda predecir. (¿quizás relacionado con el ciclo de digestión?)
¿Dónde puedo encontrar una buena lista de todos los operadores de RxJS disponibles en Angular2, suponiendo que exista?
¿Es esto solo un problema de tipos de TypeScript? Si es así, ¿cómo instalarlos para tener todos los operadores que están disponibles en la documentación? Si no hay tipos disponibles, ¿cómo deshacerse temporalmente de este problema de
"no se encontró propiedad/método en x"?
Muchas gracias por tomarte el tiempo para leer y ayudarme a encontrar una solución a esto :)
Respuesta #1
Problema raíz: Estás usando una versión de RxJS pero mirando la documentación de otra.
RxJS 5 (beta) usado con Angular 2: https://github.com/ReactiveX/rxjs RxJS 4 (estable): https://github.com/Reactive-Extensions/RxJS
Esos operadores no existen en la nueva versión, por lo que no puedes verlos.
A tus preguntas:
1) RxJS no tiene nada que ver con Angular2, puedes usar RxJS sin Angular2. RxJS es solo una biblioteca para crear flujos de eventos, funciona de manera ortogonal a lo que sea que uses para generar eventos.
2) Si estás usando RxJS 4, entonces puedes usar la documentación, que es bastante buena. RxJS 5 todavía está en desarrollo, pero hay documentación que es generada por el proceso de compilación aquí.
3) No es un problema de tipados en este caso.

