What's the point of keeping this information around at runtime if you do all your type checks at compile time?
Based on this categorisation, Haskell for example isn't a strongly typed language, and yet Haskell's type checking is one of its biggest selling points, so this doesn't seem quite right.
It forces you to write input validation code that stays in sync with your types. Otherwise bad input can invalidate all your type guarantees.
Better than silently failing! + if code fails early as these type checks can enable, then bugs are often (not always) picked up just by running the code once.
"strongly typed mainstream high level language" does not say anything about that, hence my question.
At work I develop for both PHP and Java projects and... it's cumbersome to develop for Java projects, to say it nicely. Ever tried developing for Jira, Jenkins or enterprise CMSes?
Not to be a pedantic curmudgeon... actually, precisely to be a pedantic curmudegon... javascript does not require any of that.
The byzantine and asinine ecosystem that has sprouted like a cancer around javascript when SV and Node noticed the language and its profit potential, fueled by hype and unnecessary complexity? Yes. But the ecosystem is not the language.
Javascript itself is exactly like PHP in this regard - you edit a file, upload to the server, refresh the browser.
Everything else is unnecessary. Useful? Maybe. Bullshit? Probably. But not necessary.
That use case, the one for which the language was intended, does indeed work as described, and has for decades.
I've gone all-in on the Microsoft stack and have not regretted a single moment of this decision. If one can put aside the "big evil company ecosystem bad" argument for just a moment, I think it would be very difficult to say another ecosystem is superior in terms of actual time-to-market for your product.
And some of the best libraries which did exist were under commercial licenses! Which generally isn't an issue in other ecosystems.