The RBS files seem like a weird compromise to me. I I'm not sure I see the practical benefit, but maybe someone who has used .d.ts files can explain it. Is it just helpful if your IDE has tooling to use it? Seems like it could be helpful, but also sounds like it will become an annoying "code quality" hoop those of us that don't use VSCode will have to jump through for little benefit. When you read code outside of your IDE, like a code review, will you have to scan both files at once in order to benefit from static type information? Does it enforce types at runtime? I'm curious but it's a tough sell to me. I've used optional types in both PHP and Python and found them to be an annoyance compared to strong typing in Rust, where they basically guide you at every step.

The IO/performance improvements and concurrency improvements are exciting. Reading this makes me want to try out ractors.

I think the idea is that it lets you provide type definitions for external libraries. I've never used TypeScript before, but I've heard from friends who use it that sometimes people will write type definitions for third-party libraries whose original authors might not have the time or interest to do it themselves. Basically, it lets you use an arbitrary JS library as though it's properly typed, as long as the maintainer of the type definitions keeps them up to date.

This is the use case that I'm familiar with. For packages that don't bundle types, type definitions are often available through DefinitelyTyped[0].

  npm install --save-dev @types/node
> The types should then be automatically included by the compiler

[0] https://github.com/DefinitelyTyped/DefinitelyTyped