paint-brush
How To Access Properties Of Objects On Observables Like A True Expert by@kddsky
3,521 reads
3,521 reads

How To Access Properties Of Objects On Observables Like A True Expert

by November 11th, 2020
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

The RxJS/TS package allows you to access props of objects on Observables. It uses Proxies under the hood, recursively applying it to sub-properties and method results. The package has good TypeScript support, so all props are intelli-sensed by cats, dogs, and IDEs. The source code and more examples are available on the project's GitHub repo: GitHub.com/kosich/Rxjs-proxify-repl. It's also possible to call methods on values using RxJS operators at any depth.

Company Mentioned

Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - How To Access Properties Of Objects On Observables Like A True Expert
 HackerNoon profile picture

Hi, fellow RxJS streamer! 👋

Today I want to share a JS/TS package that allows you to access props of objects on Observables:

source$.subscribe(o => console.log(o?.a?.b?.c))
// turn ↑ into ↓
source$.a.b.c.subscribe(console.log)

tl;dr: 

A simple use case: read the

msg
property of each value on the stream

import { proxify } from "rxjs-proxify";
import { of } from "rxjs";

const source = of({ msg: 'Hello' }, { msg: 'World' });
const stream = proxify(source);
stream.msg.subscribe(console.log); // 'Hello', 'World'
☝️ 
proxify
 will create a Proxy for given Observable

You can even use JS destruction assignment:

const { msg } = proxify(source);
msg.subscribe(console.log); // 'Hello', 'World'

The package has good TypeScript support, so all props are intelli-sensed by cats, dogs, and IDEs:

import { of } from 'rxjs';
import { proxify } from 'rxjs-proxify';

const source = of({ a:1, b:1 }, { a:2, b:2 });
const stream = proxify(source);
stream. // <- will suggest .a .b .pipe .subscribe etc
👀 I can see your intentions

It's also possible to call methods on values (even those using

this
keyword), e.g.:

import { proxify } from "rxjs-proxify";
import { of } from "rxjs";

const source = of({ msg: () => 'Hello' }, { msg: () => 'World' });
const stream = proxify(source);
// calls msg() fn on each value of the stream
stream.msg().subscribe(console.log); // 'Hello', 'World'
🤯 pure magic, I tell you

And you are still free to apply RxJS operators at any depth:

import { proxify } from "rxjs-proxify";
import { of } from "rxjs";
import { scan } from "rxjs/operators";

const source = of({ msg: 'Hello' }, { msg: 'World' });
const stream = proxify(source);
stream.msg.pipe(scan((a, c)=> a + c)).subscribe(console.log); // 'HelloWorld'
Just like regular Observables!

The package uses  under the hood, recursively applying it to sub-properties and method results, so the chain can be indefinitely deep. And you can apply .subscribe or .pipe at any time!

🎹 Try it

You can install it via 

npm i rxjs-proxify

Or test it online: 

📖 Repository

The source code and more examples are available on the project's GitHub repo:

Outro

If you enjoyed reading — please, indicate that with ❤️ 💡⛵️💰 buttons — it helps a lot!

Soon I'll post a more detailed review of the lib and how it works

Follow me on  for more RxJS, React, and JS posts

Thank you for reading this article! Stay reactive and have a nice day 🙂

Psst.. need something more to read?

I got you covered:

Cya 👋

Also published at

바카라사이트 바카라사이트 온라인바카라