Ada is a very strongly-typed language and is great for large-scale projects.
"Underlying Ada's design are principles that include the following:
Readability is more important than conciseness. Syntactically this shows through the fact that keywords are preferred to symbols, that no keyword is an abbreviation, etc.
Very strong typing. It is very easy to introduce new types in Ada, with the benefit of preventing data usage errors.
It is similar to many functional languages in that regard, except that the programmer has to be much more explicit about typing in Ada, because there is almost no type inference.
Explicit is better than implicit. Although this is a Python commandment, Ada takes it way further than any language we know of:
There is mostly no structural typing, and most types need to be explicitly named by the programmer.
As previously said, there is mostly no type inference.
Semantics are very well defined, and undefined behavior is limited to an absolute minimum.
The programmer can generally give a lot of information about what their program means to the compiler (and other programmers). This allows the compiler to be extremely helpful (read: strict) with the programmer."
https://learn.adacore.com/courses/intro-to-ada/chapters/intr...
https://learn.adacore.com/courses/intro-to-ada/chapters/stro...
Strong typing is also great for optimization since it gives the compiler much more information about what is allowable for a given type or how it should be represented / implemented.
Other ways to manage large code bases include TDD with sufficient unit tests (can give more insight then just type errors).
(Python & JS -> TS)