Learn
← Previous Next →

Hari 4: Interface & Type Alias

60 min Last updated 09 Apr 2026

Interface — Mendefinisikan Bentuk Objek

interface Produk {
    readonly id: number;  // tidak bisa diubah
    nama: string;
    harga: number;
    stok?: number;        // opsional
    deskripsi?: string;
}

const laptop: Produk = { id: 1, nama: "Laptop", harga: 8500000, stok: 10 };

// Interface untuk fungsi
interface Kalkulator {
    tambah(a: number, b: number): number;
    kurang(a: number, b: number): number;
}

// Implementasi
const kalk: Kalkulator = {
    tambah: (a, b) => a + b,
    kurang: (a, b) => a - b,
};

Type Alias — Nama untuk Tipe

type Point = { x: number; y: number };
type Callback = (error: Error | null, data?: string) => void;
type Predicate = (value: T) => boolean;

// Union type alias
type Direction = "north" | "south" | "east" | "west";

// Perbedaan Interface vs Type:
// - Interface bisa di-extend/merge, Type tidak
// - Type lebih fleksibel (union, intersection, conditional)
// - Keduanya bisa untuk object shape

Interface Extends

interface Animal { nama: string; suara(): string; }
interface Pet extends Animal { pemilik: string; }
interface Dog extends Pet { ras: string; }

const myDog: Dog = {
    nama: "Rex", pemilik: "Budi", ras: "Husky",
    suara: () => "Guk!"
};
console.log(`${myDog.nama} (${myDog.ras}): ${myDog.suara()}`);

💡 Notice: Manager extends Karyawan artinya Manager punya semua property Karyawan plus tambahan. Fungsi yang menerima Karyawan juga bisa menerima Manager (Liskov Substitution).

Assignment

Buat interface Karyawan dengan id, nama, departemen, gaji. Buat interface Manager extends Karyawan dengan tambahan bawahan: string[] dan anggaran: number. Buat 1 Karyawan dan 1 Manager, tampilkan info keduanya.

Expected output:

Budi - IT: Rp 6,000,000
Sari - Engineering: Rp 12,000,000
Bawahan: Budi, Ani
TS index.ts
Solution
Output