Pendahuluan

TypeScript adalah superset dari JavaScript yang menambahkan dukungan tipe statis. Dengan TypeScript, kita bisa menulis kode yang lebih aman, mudah di-maintain, dan lebih mudah didokumentasikan. Artikel ini membahas dasar-dasar TypeScript secara lengkap, mulai dari instalasi hingga konsep lanjutan seperti Generics dan Error Handling.

Mengapa Menggunakan TypeScript?

  • Deteksi Error di Waktu Kompilasi: Mengurangi bug saat runtime

  • Meningkatkan Produktivitas: Dukungan autocompletion dan dokumentasi di editor (seperti VSCode).

  • Skalabilitas: Cocok untuk proyek besar karena memiliki fitur modular dan type-checking.

Studi Kasus: Kapan Sebaiknya Menggunakan TypeScript?

  • Saat membangun aplikasi berskala besar.

  • Ketika bekerja dalam tim besar untuk meminimalisasi kesalahan.

  • Untuk meningkatkan performa debugging dan prediktabilitas kode.


Memulai dengan TypeScript

Global Installasi TypeScript

install -g typescript

Inisialisasi Proyek TypeScript

tsc --init

Menjalankan Kode TypeScript

tsc index.ts && node index.js

Tipe Data Dasar (Primitive Types)

String, Number, Boolean

let nama: string = "Irvan";
let usia: number = 27;
let aktif: boolean = true;

Array & Tuple

let angka: number[] = [1, 2, 3];
let biodata: [string, number] = ["Irvan", 27];

Any, Unknown, Never

let random: any = "Bebas";
let value: unknown = 42;
function throwError(): never {
  throw new Error("Terjadi Kesalahan");
}

Tipe Kompleks (Object, Enum, Union)

Object

type User = {
  id: number;
  name: string;
};

let user: User = { id: 1, name: "Irvan" };

Enum

enum Role {
  Admin,
  User,
  Guest,
}

let role: Role = Role.Admin;

Union & Intersection

let id: string | number = "123";

interface Person {
  name: string;
}

interface Employee {
  id: number;
}

type Staff = Person & Employee;

Function di TypeScript

Mendefinisikan Tipe Parameter dan Return

function tambah(a: number, b: number): number {
  return a + b;
}

Optional & Default Parameters

function sapa(nama: string, umur?: number) {
  console.log(`Halo ${nama}`);
}

function greeting(name: string = "User") {
  console.log(`Welcome, ${name}`);
}

Interface vs Type Alias

Interface

interface Person {
  nama: string;
  umur: number;
}

Type Alias

type ID = string | number;

type User = {
  id: ID;
  name: string;
};

Perbedaan Utama:

  1. interface cocok untuk object yang besar dan dapat di-extend.
  2. type lebih fleksibel dan cocok untuk union atau intersection types.

Class dan Inheritance di TypeScript

Class Dasar

class User {
  constructor(public name: string, private age: number) {}

  getAge(): number {
    return this.age;
  }
}

Inheritance (Pewarisan)

class Admin extends User {
  constructor(name: string, age: number, public role: string) {
    super(name, age);
  }
}

Generics (Tipe Dinamis dan Fleksibel)

Generics memungkinkan kita membuat fungsi atau class yang dapat bekerja dengan berbagai tipe data tanpa kehilangan keamanan tipe.

Generics adalah seperti wadah fleksibel yang bisa menyimpan berbagai jenis barang, seperti kotak yang bisa diisi mainan atau buku.

Contoh Penggunaan Generics

function wrap(value: T): T[] {
  return [value];
}

const angka = wrap(5);
const kata = wrap("Hello");

Error Handling di TypeScript

TypeScript memungkinkan penanganan error dengan menggunakan try-catch dan tipe khusus.

try {
  throw new Error("Terjadi Kesalahan");
} catch (error) {
  console.error((error as Error).message);
}

Kesimpulan

  • TypeScript membantu membangun aplikasi yang lebih aman dan terstruktur.
  • Pahami dasar seperti tipe data, fungsi, class, dan generics.
  • Selalu gunakan strict mode di tsconfig.json untuk validasi lebih ketat.

Rekomendasi Selanjutnya:

  • Pelajari lebih lanjut tentang Mapped Types dan Utility Types.
  • Optimalkan proyek Anda dengan praktik terbaik TypeScript.

Sumber Tambahan: