Great article Dewaun!

This line of code:

table$: Observable<Table["table"]>;

made me wonder why you didn't just define it: table$: Observable<Array<Row>>;

as it's basically an array of rows. I'm a big fan of accessing properties as Table.table because if you refactor the name, you will get the errors in compile time instead of run time. Friendly review :)