this post was submitted on 14 Nov 2023
809 points (94.6% liked)

Programmer Humor

32453 readers
739 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 95 points 1 year ago (2 children)

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.

[–] [email protected] 49 points 1 year ago (2 children)

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

[–] [email protected] 35 points 1 year ago (1 children)

Honestly, programming is great for teaching you that you are the stupid one. This is still a feature.

[–] [email protected] 13 points 1 year ago* (last edited 1 year ago) (4 children)

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.

[–] [email protected] 7 points 1 year ago (1 children)

This is more a condemnation of nest.js than ts. It seems great in theory. I like the architecture and the ability to share models and interfaces between front and backend, but it's objectively makes everything more complicated. It adds layers of abstraction that should not be necessary and it's such a niche/unpopular framework for backend systems that you generally have to jump through hoops to do anything moderately complex. Not only do new devs have to learn typescript to use it, they have to learn the nest architecture to know how to do things "the right way" and you still end up in situations like this which looks perfectly valid but isn't. Typescript was never meant to be used for backend, and trying to make it do so and then complaining about it is like jogging while carrying a gun, shooting yourself in the foot, and blaming the gun.

[–] [email protected] 1 points 1 year ago

the ability to share models and interfaces between front and backend

On the other hand, this can be considered a downside because it locks you into using JS/TS on the front and backends.

Alternatively, if you define your models and interface with an Open API spec, you can write the front and backends in whatever language you want.

[–] [email protected] 5 points 1 year ago (1 children)

I've never used TS, and I'm not exactly sure what nest.js even does, but building a TypeScript project on top of a JavaScript library not designed for it seems like asking for trouble. Is that standard practice?

[–] [email protected] 3 points 1 year ago* (last edited 1 year ago) (1 children)

Yes. As of this writing there are 7,738 type definitions in a central repo maintained by users for plain JavaScript packages.

https://github.com/DefinitelyTyped/DefinitelyTyped

Many package owners write type definitions included with their package that is written in JavaScript also.

[–] [email protected] 1 points 1 year ago* (last edited 1 year ago) (1 children)

Web dev continues to be cursed, I guess.

If I really needed to use a JS library in TS, I'd have to build some sort of adapter between the two that crashes whenever the JS library (that doesn't know anything about your types) breaks the typing rules. Anything else will inevitably lead to the above "fun" kind of bugs.

[–] [email protected] 1 points 1 year ago

I don't think that this would work, there are no types anymore during runtime because everything is translated into plain js on build. TypeScript only exists during development

[–] [email protected] 1 points 8 months ago

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

[–] [email protected] 1 points 1 year ago

return 'myBoolean is true';

I instantly noticed this line. Shitcode is so fun.

[–] [email protected] 1 points 1 year ago
[–] [email protected] 7 points 1 year ago (2 children)

Two questions immediately come to mind. 1) Would you buy the cyanide if it was on the list. 2) Where does one casually buy cyanide? I can't imagine a case where I'd need some, but it would be handy to know if I ever did.

[–] [email protected] 4 points 1 year ago* (last edited 1 year ago)

I know you used to be able to get it for pest control, but maybe not anymore. You could also make it the old-fashioned way with molten washing soda. It can be used to make Prussian blue, for one thing.

Obviously take all necessary precautions, especially keeping NaCN away from acids.

[–] [email protected] 3 points 1 year ago

Just one word: Apples.