I agree with the sentiment about a typed language being preferable. For that reason I use TypeScript for any JavaScript microservices that I write (any JS for that matter).
I also like to use a backend framework named NestJS that uses TypeScript and provides a strong architectural foundation for backends written for Node. It also has great support for transports other than HTTP for communicating with other microservices, like gRPC, Redis pub-sub, MQTT, and NATS.
One of the advantages of microservices is that, like you've proposed, you can write services in whatever language fits the project. And then by using a transport layer like gRPC, you can maintain type safety between all of the services, even the untyped ones like JS, PHP, Python, or Ruby. gRPC uses a language called protocol buffers for defining over-the-wire types and then has a set of code generators for generating objects based on the types in your language of choice.