There's been a lot of buzz around Microsoft's proposal for type-checking. At first, I was excited about the idea, but I'm starting to become more and more skeptical about it. My biggest issue, is that I simply think it would be healthier for the JavaScript community to simply have a single, official type system rather than a type-system syntax space where you can run any type-checker against it. (Plus, I'm becoming increasingly more convinced that it's not possible to provide a flexible syntax space that really is type-checker agnostic, and doesn't favor one type-checking style over another).
In their README, they alluded to the fact that it would be highly improbably for EcmaScript to adopt a standard type system, because EcmaScript operates under "sound checks", and TypeScript became famous by explicitly not having any sound checks in their system.
But, I think there's a major hole in their argument. TypeScript couldn't provide sound checks, at least, it wouldn't be easy to do so in a performant way using what they had available to them. If we standardize some official type-checking tooling that runs on developers machines, and marry that with certain runtime behaviors, we could end up with a really nice type system that's both fast and 100% sound.
I decided to take a stab at exploring the "sound type-system" space, to see what's out there and what problems we might run into. Certainly, there's also room to explore a standard, unsound type system (i.e. a types-as-comments proposal that's intended for a single, standard type-checker), and I think that would be an interesting conversation to have, but this won't be the focus of the proposal I'm presenting.
The proposal itself turned into something fairly large. Feel free to take a look over it here and then discuss it, either in this thread or in the issues on that repository.
Update: I also started a thread on Microsoft's type-annotations proposal. Some conversation has been happening there as well, so feel free to take a peek over there too.