DEV Community

Cover image for My Journey Learning TypeScript and JavaScript
Kavishka Dinajara
Kavishka Dinajara

Posted on

My Journey Learning TypeScript and JavaScript

Introduction

As a web developer, learning JavaScript (JS) is essential because it powers the modern web. But as I dove deeper into development, I realized that TypeScript (TS) could help me write more reliable, maintainable code. In this post, I’m excited to share my journey learning both JavaScript and TypeScript, the challenges I faced, and the exciting things I discovered along the way.


1. Starting Out with JavaScript

When I first started learning JavaScript, I was overwhelmed by its versatility. JavaScript is known for being the language of the web, capable of everything from making interactive websites to building full-stack applications.

Key Concepts in JavaScript

  • Variables and Data Types: Understanding var, let, and const and the types of data (strings, numbers, arrays, etc.).
  • Functions: Writing reusable code through functions.
  • Objects and Arrays: Learning how JavaScript handles data through key-value pairs and lists.
  • Control Structures: Using loops and conditional statements to control the flow of your application.
  • DOM Manipulation: How JavaScript interacts with HTML to create dynamic content.

Example: JavaScript Basics

const name = "Kavishka";
function greetUser(name) {
  console.log(`Hello, ${name}!`);
}
greetUser(name);  // Output: Hello, Kavishka!
Enter fullscreen mode Exit fullscreen mode

This was one of the first things I learned, and it helped me understand the power of JavaScript in building dynamic applications. With this foundation, I could build small interactive websites and start experimenting with frontend frameworks.


2. Discovering TypeScript

After becoming comfortable with JavaScript, I noticed that larger applications could get tricky. This is when I discovered TypeScript—a superset of JavaScript that adds static types, making the code more predictable and easier to debug.

Why TypeScript?

  • Type Safety: TypeScript forces you to declare data types (strings, numbers, arrays), which prevents common runtime errors.
  • Code Readability: It helps me and my team understand what the code is supposed to do without guessing data types.
  • Tooling: TypeScript's support for IDE features like autocompletion and better error handling made me more productive.

Example: Transitioning from JS to TS

JavaScript:

function addNumbers(a, b) {
  return a + b;
}
console.log(addNumbers(5, "10"));  // Output: "510" (Oops! String concatenation)
Enter fullscreen mode Exit fullscreen mode

TypeScript:

function addNumbers(a: number, b: number): number {
  return a + b;
}
console.log(addNumbers(5, 10));  // Output: 15 (Correct result)
Enter fullscreen mode Exit fullscreen mode

Adding type annotations to functions and variables helped catch errors early, making my codebase more robust. As someone who transitioned from JS to TS, I found that it adds structure without overwhelming complexity.


3. Object-Oriented Programming in TypeScript

JavaScript has always supported object-oriented programming (OOP), but TypeScript enhances it by introducing better tools like classes, interfaces, inheritance, and encapsulation. I found TypeScript's OOP features especially helpful in organizing complex code.

Example: OOP in TypeScript

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound() {
    console.log(`${this.name} makes a sound`);
  }
}

class Dog extends Animal {
  makeSound() {
    console.log(`${this.name} barks`);
  }
}

const dog = new Dog("Buddy");
dog.makeSound();  // Output: Buddy barks
Enter fullscreen mode Exit fullscreen mode

TypeScript allows you to build robust OOP patterns, making it easier to scale and maintain large applications, which was a big leap forward in my development journey.


4. Advanced TypeScript Features

As I explored more, I realized how powerful TypeScript can be with its advanced features like:

  • Generics: Writing reusable code that works with any data type.
  • Interfaces: Defining the shape of objects and making code more structured.
  • Type Aliases: Creating custom types for better readability.

Example: Using Generics

function identity<T>(arg: T): T {
  return arg;
}
console.log(identity<number>(10));  // Output: 10
Enter fullscreen mode Exit fullscreen mode

Generics allow you to write flexible code that works with different types, making it a valuable tool for building reusable functions and components.


5. Challenges Along the Way

One of the challenges I faced was managing the complexity that comes with learning TypeScript’s strict typing system. At first, it felt like I was writing more code, but I quickly realized that this additional effort paid off in preventing bugs. TypeScript also forced me to think more carefully about my data structures, which improved my overall coding practices.


6. Practical Tips for Learning JavaScript and TypeScript

If you're starting with JavaScript and TypeScript, here are a few tips that helped me:

  • Practice, Practice, Practice: The best way to learn is by building small projects. Start with simple web pages in JavaScript and then add TypeScript for better type safety.
  • Embrace Errors: Don’t get discouraged by TypeScript's strictness. Those red squiggly lines in your IDE are there to help you write better code!
  • Learn by Example: Use examples from documentation and tutorials to understand key concepts, then modify them to fit your needs.
  • Pair Programming: Discussing code with others helped me solidify concepts and learn new tricks.

Conclusion

Learning JavaScript and TypeScript has been an exciting and rewarding journey. JavaScript gave me the flexibility to build interactive web applications, while TypeScript added the structure and safety I needed for more complex projects. Combining these two technologies has improved my code quality and helped me grow as a developer.

I’m excited to continue my journey with TypeScript and JavaScript, and I hope my experience helps others who are also on the path of learning these powerful tools. If you're just starting out, keep experimenting, building, and pushing your limits—there’s always more to learn!


What’s Next?

Next, I plan to dive deeper into Next.js with TypeScript and experiment with backend TypeScript for full-stack applications. Stay tuned for my upcoming posts on that!


Top comments (0)