I like the "why we do it" part in every section. Kudos to the author for that.

However, the type guard section seems a bit off to me. Is the suggestion to check each and every property of `Product` in `isProduct`? Seems a bit verbose.

I tend to use Axios, which uses generics to set the payload return type (obviously, some trust in your API responses is needed here):

    axios.get(...);
I think the idea is that you validate the data once, on an API level. You don't need to validate the same data again after the initial inspection.

In our team we use io-ts to validate all of our endpoints, but simple type guards could achieve the same goal.

https://github.com/gcanti/io-ts