Do you feel that the strict type-checking that Delphi/Pascal do, has helped you in any way? I have done some stuff in TypeScript but what happens in our group is that they just use ":any" which defeats the checks, if they can't get it working right away (stack is Java on one side, Angular on the JS side). Wondering if the strictness has helped you avoid errors or not.
Sounds like an organizational problem, if people are passing code reviews with any littered all over the place then your engineering culture is flawed. At least at my company, you need to have a discussion explaining why any use of the any type is justified or else it will be by default rejected.
I agree it's an organizational problem; however in Delphi/Pascal I don't think you can turn off the checks at all; so, in a sense, that's a level of type checking that is comforting...
Oh absolutely. While I every now and then feel a bit restricted by it, overall it's just such a mental relief not to have to think about those things because the compiler will catch me if I mess up.
For example, when we upgrade a dependency and suddenly we get 30 compiler errors because the signature of a call-back function in the new version of the dependency differs. Without strong typing and strict checking that could be 30 support cases (or more) as we don't have full integration test suites for all the various customer integrations for various reasons.
Strong typing helps a lot with readability, as it can make the code a lot more self-documenting. Very often I don't need any separate documentation. Just by looking at a function signature I can see what types it expect, I can thus find code for those types to see what they look like and that way gain a good understanding of what I need to do to call that function and, just as importantly, what I get back.
Strict checking means I don't have to worry about silly bugs all over. Want to assign a string to an integer variable? Well then you better say so.
In fact the areas that annoy me the most is those where the strict checking fails. For example the TDateTime type, which holds a time and a date unsurprisingly, is defined as a type alias for a double-precision float. Thus "myDateTime := Pi;" compiles just fine.
This is mainly for historical reasons, as records (structs) were more limited and clunky back in the days, however the type is so ingrained in library code all over it's hard to avoid.