Pengantar JavaScript: Sejarah, Fitur, dan Contoh Dasar

Oleh: Andi Ardiansyah Nasir Terakhir diperbarui: 23 Juni 2025

Pengenalan TypeScript

TypeScript adalah bahasa pemrograman yang dikembangkan oleh Microsoft sebagai superset dari JavaScript. Artinya semua kode JavaScript yang valid juga valid di TypeScript, tetapi TypeScript menambahkan fitur tambahan seperti static typing (pengetikan statis) untuk mendefinisikan tipe data variabel, yang membantu mengurangi kesalahan yang mungkin terdeteksi saat runtime di JavaScript. TypeScript juga mendukung fitur-fitur modern seperti async/await, decorators, dan integrasi dengan berbagai framework JavaScript populer seperti React, Angular, dan Vue.js.

Tipe Data Primitif

String

String adalah tipe data yang digunakan untuk merepresentasikan teks atau urutan karakter. String didefinisikan dengan mengapit teks dengan tanda kutip tunggal (') atau tanda kutip ganda (") atau bisa juga menggunakan string literal (`)

let nama: string = "Budi";
const salam: string = `Halo ${nama}`;

Number

Number adalah tipe data primitif yang digunakan untuk merepresentasikan angka. Ini mencakup bilangan bulat (integer) dan bilangan desimal (floating-point).

let umur: number = 25;
const harga: number = 99.99;

Boolean

Hanya bernilai true atau false

let aktif: boolean = true;
const selesai: boolean = false;

Tipe Data Array

Array Sederhana

let angka: number[] = [1, 2, 3];
const nama: Array<string> = ["Andi", "Budi"];

Readonly Array

Array yang tidak bisa diubah setelah dibuat

const warna: ReadonlyArray<string> = ["merah", "hijau"];
// warna.push("biru"); // Error

Tuple

Array dengan panjang dan tipe data tetap

let user: [string, number] = ["Andi", 25];
const statusHTTP: [number, string] = [200, "OK"];

Tipe Data Any

Digunakan ketika tipe data tidak diketahui atau dinamis

let dataDinamis: any = "Bisa diisi apa saja";
dataDinamis = 100; // Valid
dataDinamis = true; // Valid

⚠️ Hindari penggunaan any kecuali benar-benar diperlukan karena menghilangkan type checking

Union Type

Memungkinkan variabel memiliki beberapa tipe data

let id: string | number;
id = "ABC123"; // Valid
id = 123; // Valid

// Dengan type checking
function printId(id: string | number) {
  if (typeof id === "string") {
    console.log(id.toUpperCase());
  } else {
    console.log(id.toFixed(2));
  }
}

Type Alias

Membuat nama baru untuk tipe data yang sudah ada

Untuk Object

type User = {
  id: string;
  name: string;
  age?: number; // Properti opsional
};

const user1: User = {
  id: "1",
  name: "Andi"
};

Untuk Union

type Status = "active" | "inactive" | "pending";

function setStatus(status: Status) {
  // ...
}

Object Type

Lebih disarankan daripada type alias untuk mendefinisikan bentuk object

interface Product {
  id: string;
  name: string;
  price: number;
}

const laptop: Product = {
  id: "P001",
  name: "Laptop Gaming",
  price: 15000000
};

Optional Properties

Properti yang boleh tidak diisi (undefined)

interface Config {
  apiUrl: string;
  timeout?: number; // Opsional
  retry?: boolean;  // Opsional
}

const config1: Config = {
  apiUrl: "https://api.contoh.com"
  // timeout dan retry tidak diisi
};

Enum

Kumpulan nilai konstan yang sudah pasti

enum Arah {
  Atas = "ATAS",
  Bawah = "BAWAH",
  Kiri = "KIRI",
  Kanan = "KANAN"
}

function gerakan(arah: Arah) {
  // ...
}

gerakan(Arah.Atas);

Null dan Undefined

let nama: string | null = null;
nama = "Andi"; // Valid

function cariUser(id: string): User | undefined {
  // ...
}

Interface

Untuk mendefinisikan bentuk object

interface Mahasiswa {
  nim: string;
  nama: string;
  ipk: number;
}

Function Interface

Mendefinisikan bentuk function

interface SearchFunction {
  (source: string, keyword: string): boolean;
}

const cari: SearchFunction = (src, kw) => {
  return src.includes(kw);
};

Indexable Interface

Untuk object atau array yang bisa diakses dengan index

interface StringArray {
  [index: number]: string;
}

const array: StringArray = ["a", "b", "c"];
console.log(array[0]); // "a"

Extending Interface

Mewarisi properti dari interface lain

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

interface Pekerja extends Orang {
  jabatan: string;
  gaji: number;
}

Function dalam Interface

interface Jam {
  waktuSekarang: Date;
  setWaktu(d: Date): void;
}

Intersection Type

Menggabungkan beberapa tipe menjadi satu

type Admin = {
  nama: string;
  hakAkses: string[];
};

type Karyawan = {
  nama: string;
  mulaiKerja: Date;
};

type AdminKaryawan = Admin & Karyawan;

const admin1: AdminKaryawan = {
  nama: "Budi",
  hakAkses: ["create", "delete"],
  mulaiKerja: new Date()
};

Type Assertion

Memberitahu TypeScript tentang tipe data yang kita ketahui

let nilai: any = "ini string";
let panjang: number = (nilai as string).length;

// Alternatif syntax
let panjang2: number = (<string>nilai).length;

⚠️ Gunakan dengan hati-hati karena bisa menyebabkan runtime error jika salah