As a JavaScript developer I once abhorred TypeScript, until I realized TypeScript's type system is really powerful, it can do something like <Parameters<GetSomeFunc>> and <ReturnType<DoThisFunc>>.
Mind. Blown.
Mind. Blown.
My biggest typescript gripe is the fact that interface and type are _nearly_ interchangable, and many codebases just use interface wholemeal where it isn't really appropriate.
The type and interface is just because they are structural typing. It's attempting to stay faithful to JavaScript after all. Without that then the intuition breaks and not consistent.