DEV Community

Cover image for TypeScript used to be on my $#!% 💩 list
shecodez
shecodez

Posted on

TypeScript used to be on my $#!% 💩 list

JavaScript (JS)

JS - a high-level, ECMAScript, interpreted / just-in-time compiled programming language developed by Brendan Eich of Netscape. Not to be confused with Java.

JavaScript was initially created to “make web pages alive”.

  • well known - JS is almost as old as the internet
  • JS is an OOP (object oriented programming) language
  • JS is single-threaded
  • but JS is weakly and dynamically typed

👩🏽‍💻 (me): Good ol' JavaScript, what more can I say about one of the worlds most popular scripting language? 🌎 (world): Learn to TypeScript or GTFO.

So I started learning TypeScript. Not gonna lie it was so painful in the beginning. I hadn't been working with JS long enough, understand JS well enough, or become annoyed enough by all the silly JS errors / browser compatibility issues to appreciate something like TS.

Thus, TS was very much so on my 💩 list, but I have since seen the light.

TypeScript (TS)

TS - a strongly typed programming language developed by Microsoft that builds on JavaScript, giving you better tooling at any scale.

Editor Checks

Suddenly debugging was less of a nightmare with editor checks, because if TS doesn't like it, it wont compile.

const user = {
  id: l334,
  firstName: "Nicole",
  lastName: "Nobles",
  job: "Web developer",
}

console.log(user.name)
Enter fullscreen mode Exit fullscreen mode

JS doesn't know to alert me that user doesn't have a name property.

but with TS I get an error:
Property 'name' does not exist on type { firstName: string; lastName: string; job: string }

Auto-complete

No more guessing what properties are on an object.

Interfaces

If I made a User interface I can't add / remove any required properties to the object.

*Note: adding ? after a property makes it optional.

interface User {
  id: number
  firstName: string
  lastName: string
  job: string
  remote?: boolean
}

function updateUser(id: number, update: Partial<User>) {
  const data = getUser(id)
  const user = { ...data, ...update, city: "Hachiōji" }
  saveUser(id, user)
}
Enter fullscreen mode Exit fullscreen mode

TS will rightfully complain that 'city' does not exist on interface 'User'.

This only the tip of the TS iceberg. Don't take my word for it, you can check out the documentation here.

Conclusion

Once given a proper chance TypeScript has been amazingly helpful at saving me time and hard ache with features Editor Check, Auto-complete, and Interfaces. I won't lie sometimes I just slap any on things and call it a day, but it eats away at me until I get it typed like the rest of the project.

So, Keep calm, and Type(Script) on. Thanks for reading! 😊

Oldest comments (8)

Collapse
 
mrwormhole profile image
Talha Altınel • Edited

Every TS hero used to be TS blamer before. It is a natural process to learn TS, once you learn it you never go back to JS. It is all about developer experience and better tidied up code

Collapse
 
jonrandy profile image
Jon Randy 🎖️ • Edited

Tried TS numerous times - still on my shitlist. Writing normal JS with the TS language server on is nice, but you can keep your TS

Collapse
 
eljayadobe profile image
Eljay-Adobe

I've used TypeScript in a big project. A very big project.

I don't think we would have been successful if we just used vanilla JavaScript. And I'm a fan of vanilla JavaScript.

(Although TypeScript "ES6" for ES5 & ES3 is no longer a significant selling point, it was super useful back on that project when ES6 was not widely available yet.)

Props to TypeScript!

Collapse
 
jwp profile image
John Peters

What a great post. You brought up all the salient points. Once a person dials into TS, they'll never go back to Js.

Collapse
 
jwp profile image
John Peters

What type hell?

Collapse
 
minhtrn98 profile image
minhtrn98

Why JS is an OOP?

 
jwp profile image
John Peters

The link you provided and the example code clearly show me what he doesn't know about coding.

  • The any operator should never be used except rarely. If needed he can change compiler config to allow.
  • complaints about unused imports is great feature, he doesn't like it.

It's a classic case of a Javascript fanboy disliking disciplined programming techniques.

In my career I've had to clean up huge monorepos with lack of discipline and expertise. The effort in doing that in an Agile environment always exceeds alloted time expectations. This makes those cleaning up crap code look bad. The sad part is the Product Owners and team leads that let this happen never take the hit.

Collapse
 
bcowley1220 profile image
Brendan Cowley

What this really comes down to is personal preference and team experience. The recommendation that I can offer for everyone is don't pigeonhole yourself into thinking that your way is the best way. There are a lot of Dev's out there, including myself, who just don't want to write in TypeScript, for whatever reason.

Diversity of ideas, and different methods of problem solving are going to become even more important as we turn this next corner here, not to mention you're limiting your ever shrinking talent pool. TypeScript is just a tool, but unfortunately like everything else when you're a hammer everything looks like a nail.