I like TypeScript less for its ability to categorize my grocery list and more for its ability to stop anyone from putting cyanide on it.
I hate Typescript for promising me that nobody can put cyanide on the list, but in reality it disallows ME from putting cyanide on the list, but everyone else from the outside is still allowed to do so by using the API which is plain JavaScript again
Honestly, programming is great for teaching you that you are the stupid one. This is still a feature.
The main problem with JavaScript and TypeScript is that there is such a little entrybarrier to it, that way too many people use it without understanding it. The amount of times that we had major issues in production because someone doesn’t understand TypeScript is not countable anymore and our project went live only 4 months ago.
For example, when you use nest.js and want to use a boolean value as a query parameter.
As an example:
@Get('valueOfMyBoolean') @ApiQuery( { name: 'myBoolean', type: boolean, } ) myBooleanFunction( @Query('myBoolean') myBoolean: boolean ){ if(myBoolean){ return 'myBoolean is true'; } return 'myBoolean is false'; }
You see this code. You don’t see anything wrong with it. The architect looks at it in code review and doesn’t see anything wrong with it. But then you do a
GET https://something.com/valueOfMyBoolean?myBoolean=false
and you get “myBoolean is true” and if you do typeOf(myBoolean) you will see that, despite you declaring it twice, myBoolean is not a boolean but a string. But when running the unit-tests, myBoolean is a boolean.Typically when creating API interfaces you’d be better off marking the inputs as unknown, and then using something like Zod to validate the types
tomatoes are fruits that are often used as vegetables and are botanically classified as berries*
*according to wikipedia and my interpretation of it
Technically, according to the definition of a fruit, the cucumber is also a fruit, so yes, the tomato/cucumber salad is a fruid salad.
Intelligence is knowing that tomatoes are a fruit. Wisdom is knowing that they don’t go into a fruit salad.
Charisma is selling salsa as a tomato based fruit salad
The fact that this meme makes sense to anyone demonstrates how dynamic typed programming languages cause brain damage.
I prefer to think of it as maybe don’t shoehorn a shitty type checker into a dynamic language. Honestly I think people who get excited about typescript should fuck off and go write java instead.
The type checker is actually pretty smart and can handle a lot of weird use cases, especially in strict mode (if you mark everything as Any type, that’s on you). The fact that the underlying language is very dynamic can be both good and bad. It’s good because you can be flexible when you need to be, but it also won’t prevent you from writing really shitty code, which lends it its reputation.
I don’t know if you’ve ever tried writing frontends in Java, but it is terrible, especially if you want to make dynamic and accessible UIs. You don’t use a power drill when you need to hammer a nail.
My comment was obviously devoid of any nuance, I am on programmer humor after all. I actually do use typescript, but I think fixing issues in application code that isn’t used by other code is a waste of time. I also think there are lots of advantages of a very dynamic language, like usable REPLs and much easier debugging. We can take these advantages way further by embracing the dynamic nature of javascript, like how lisps do it for example. But instead, everyone is happy going down the route of turning it into another c# (nothing against c# but we don’t need all languages to be c# and java).
JS is the one that’s built into the browser. If JS wasn’t built into the browser, it would go onto the trashbin of bad old languages that only survived because of their platform like VBA and ActionScript and .bat batch scripting. You can’t compare JS to any other language because JS is the one you don’t get a choice on.
Fine but whatever you think about js, dynamic languages have certain advantages, and trying to turn it into another java or c# is a stupid endeavor. You’re not “fixing” javascript by making it more like java.