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 :)