TypeScript 3.7 is around the corner and is promising to be a feature-packed release. Try the beta today and play around with Optional Chaining (the ?. operator), Nullish Coalescing (the ?? operator), recursive type aliases, and more typed goodness.
Implementing a gradual type system involves making tradeoffs between soundness (catching as many errors as possible) and completeness (not rejecting valid programs) that fundamentally impact the usability and usefulness of the type system. An examination of some of these tradeoffs by Ben Weissmann.