And for your second question about typescript, I'd love for others to chime in on this one, I'm pretty new to typescript.
From my limited experience of using typescript for reusable components, it forces you to be accurate about the definition and usage of every variable/function/component which brings up edge cases that you wouldn't have thought of otherwise (example: can user.name be null, what should we render then?)
Personally, I'm just a fan of autocomplete for discoverability :)