Introduction to TypeScript

TypeScript is a statically typed superset of JavaScript that adds optional static types to the language. It provides a way to ensure that your code is correct and robust by catching errors early during the development process. This guide will help you get started with TypeScript, understand its key features, and learn best practices for using it effectively.

What is TypeScript?

TypeScript is a programming language developed and maintained by Microsoft. It is designed for the development of large applications and transpiles to JavaScript. TypeScript adds static type definitions, which can help catch errors at compile time rather than at runtime.

Why Use TypeScript?

  • Static Typing: Helps catch errors early in the development process.
  • Enhanced IDE Support: Provides better autocompletion, navigation, and refactoring.
  • Improved Code Quality: Encourages better documentation and design.

Setting Up TypeScript

Installing TypeScript

To install TypeScript, you need to have Node.js installed on your machine. Once you have Node.js, you can install TypeScript globally using npm:

npm install -g typescript

Configuration

Create a tsconfig.json file to configure the TypeScript compiler. This file can be generated using the following command:

tsc --init

A basic tsconfig.json file might look like this:

tsconfig.json
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "strict": true,
    "outDir": "./dist",
    "rootDir": "./src",
    "esModuleInterop": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}

TypeScript Basics

Types

TypeScript adds a variety of type annotations to JavaScript. Here are some basic types:

basics.ts
let isDone: boolean = false;
let age: number = 25;
let name: string = "John";
let list: number[] = [1, 2, 3];
let tuple: [string, number] = ["hello", 10];
let unknownValue: unknown = "Hello";

Interfaces

Interfaces define the shape of an object. They are a powerful way to define contracts within your code.

interfaces.ts
interface Person {
  firstName: string;
  lastName: string;
  age: number;
  greet: () => string;
}

const user: Person = {
  firstName: "John",
  lastName: "Doe",
  age: 25,
  greet: function() {
    return `Hello, my name is ${this.firstName} ${this.lastName}`;
  }
};

console.log(user.greet());

Classes

Classes in TypeScript are similar to those in other object-oriented languages like Java or C#. They provide a way to define blueprints for objects.

classes.ts
class Animal {
  private name: string;

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

  public move(distanceInMeters: number): void {
    console.log(`${this.name} moved ${distanceInMeters} meters.`);
  }
}

let dog = new Animal("Dog");
dog.move(10);

Functions

Functions in TypeScript can have typed parameters and return types.

functions.ts
function add(a: number, b: number): number {
  return a + b;
}

const sum: number = add(5, 10);
console.log(sum); // 15

Advanced TypeScript Features

Generics

Generics provide a way to create reusable components. They allow a type to be a parameterized.

generics.ts
function identity<T>(arg: T): T {
  return arg;
}

let output1 = identity<string>("myString");
let output2 = identity<number>(100);

Enums

Enums allow us to define a set of named constants.

enums.ts
enum Direction {
  Up,
  Down,
  Left,
  Right
}

let dir: Direction = Direction.Up;
console.log(dir); // 0

Decorators

Decorators are a special kind of declaration that can be attached to a class, method, accessor, property, or parameter.

decorators.ts
function sealed(target: Function): void {
  Object.seal(target);
  Object.seal(target.prototype);
}

@sealed
class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet() {
    return "Hello, " + this.greeting;
  }
}

TypeScript with JavaScript Libraries

TypeScript can be used with JavaScript libraries by installing type definitions. For example, to use TypeScript with jQuery:

npm install @types/jquery

Then you can use jQuery in your TypeScript files:

example.ts
import * as $ from "jquery";

$(document).ready(() => {
  console.log("jQuery is ready!");
});

Best Practices

  • Enable strict mode It helps catch potential errors and enforces best practices.
  • Use readonly for immutability Prevents accidental changes to variables.
  • Avoid any type Use specific types to ensure type safety.
  • Use unknown instead of any When you need to accept any value but want to perform type checks before using it.
  • Consistent naming conventions Follow consistent naming conventions for types, interfaces, and classes.

FAQs

Q: What is TypeScript?

A: TypeScript is a statically typed superset of JavaScript that compiles to plain JavaScript. It adds static types to the language, allowing developers to catch errors early and write more robust code.

Q: How do I set up TypeScript in my project?

A: To set up TypeScript, install it globally using npm (`npm install -g typescript`), create a `tsconfig.json` file using `tsc --init`, and configure the compiler options as needed.

Q: What are the benefits of using TypeScript?

A: TypeScript offers several benefits, including static typing, better IDE support, improved code quality, and early error detection.

Q: How do I handle third-party JavaScript libraries in TypeScript?

A: You can handle third-party libraries by installing their type definitions using `npm install @types/library-name`. This allows TypeScript to understand the types used in the library.

Q: What is the difference between `any` and `unknown` types in TypeScript?

A: The `any` type allows any value to be assigned and bypasses type checking. The `unknown` type also allows any value, but requires type checking before the value can be used, making it safer than `any`.