0Pricing
Frontend Academy · Pelajaran

Interface dan Tipe Object

Deskripsikan bentuk object dengan interface dan type, perluas interface, gunakan properti opsional dengan ?, serta readonly untuk imutabilitas.

Interface dan Tipe Object adalah pelajaran Frontend Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Frontend Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Frontend Academy mencakup 4 pelajaran total.

Antarmuka dibandingkan Alias Tipe

interface dan type sama-sama menjelaskan struktur objek. Perbedaan utamanya: antarmuka dapat digabungkan (penggabungan deklarasi) dan umumnya lebih disukai untuk menentukan struktur API publik. Alias type lebih fleksibel untuk tipe yang kompleks.

// interface:
interface User {
  id: number;
  name: string;
}

// type alias (equivalent for objects):
type User = {
  id: number;
  name: string;
};

Mendefinisikan Antarmuka

Gunakan interface untuk menentukan struktur objek. Semua properti wajib diisi secara bawaan. Pisahkan properti dengan titik koma.

interface Product {
  id: number;
  name: string;
  price: number;
  description: string;
  inStock: boolean;
  category: string;
}

Properti Opsional dan Hanya-Baca

Tandai properti sebagai opsional dengan ?. Gunakan readonly untuk mencegah perubahan. readonly memberlakukan sifat tidak dapat diubah saat kompilasi.

interface Config {
  host: string;
  port?: number;          // optional: number | undefined
  readonly apiKey: string; // can't change after assignment
}

const config: Config = { host: 'localhost', apiKey: 'abc' };
config.port = 8080;       // OK
config.apiKey = 'new';    // Error: readonly

Memperluas Antarmuka

Gunakan extends untuk membuat antarmuka baru yang menyertakan semua properti dari antarmuka lain. Pewarisan berganda didukung.

interface Animal {
  name: string;
  sound(): string;
}

interface Dog extends Animal {
  breed: string;
  fetch(): void;
}

interface ServiceDog extends Dog {
  task: string;
}

Tanda Tangan Indeks — Kunci Dinamis

Jika Anda belum mengetahui nama properti sejak awal tetapi mengetahui tipe nilainya, gunakan tanda tangan indeks.

interface StringMap {
  [key: string]: string;
}

const headers: StringMap = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer token123'
};

// Also for translating:
interface Translations {
  [locale: string]: { [key: string]: string };
}

Tipe Fungsi dalam Antarmuka

Tentukan tanda tangan metode di dalam antarmuka—baik sintaks singkat maupun sintaks properti lengkap dapat digunakan.

interface Logger {
  log(message: string): void;
  warn(message: string): void;
  error(message: string, err?: Error): void;
}

// Also valid:
interface Logger2 {
  log: (message: string) => void;
}

Menerapkan Antarmuka dalam Kelas

Sebuah kelas dapat implement satu atau beberapa antarmuka. TypeScript memverifikasi bahwa kelas tersebut menyediakan semua anggota yang diwajibkan.

interface Serialisable {
  serialise(): string;
  deserialise(data: string): this;
}

class User implements Serialisable {
  constructor(public name: string) {}
  serialise() { return JSON.stringify({ name: this.name }); }
  deserialise(data: string) {
    const obj = JSON.parse(data);
    return new User(obj.name) as this;
  }
}

Penggabungan Deklarasi

Beberapa deklarasi interface dengan nama yang sama digabungkan menjadi satu. Ini berguna untuk memperluas tipe pihak ketiga. Alias tipe tidak mendukung hal ini.

interface Window {
  myPlugin: { version: string };
}
// Now window.myPlugin is typed everywhere

Tipe Objek Bertingkat

Properti antarmuka itu sendiri dapat memiliki tipe objek—baik ditulis langsung maupun melalui referensi ke antarmuka lain.

interface Order {
  id: string;
  customer: {
    name: string;
    email: string;
  };
  items: Array<{
    productId: string;
    quantity: number;
    price: number;
  }>;
  total: number;
}

Pengetikan Struktural — Pengetikan Berdasarkan Bentuk

TypeScript menggunakan pengetikan struktural: suatu nilai memenuhi sebuah tipe jika memiliki setidaknya semua properti yang diwajibkan. Tidak perlu menggunakan implements secara eksplisit. Objek apa pun dengan struktur yang sesuai akan kompatibel.

interface Named {
  name: string;
}

function greet(obj: Named) {
  console.log(`Hello, ${obj.name}!`);
}

// No 'implements Named' needed:
greet({ name: 'Alice', age: 30 }); // OK — has the name property

Gabungan dengan Pembeda pada Antarmuka

Tambahkan properti pembeda bertipe literal untuk membedakan varian dalam suatu tipe gabungan. TypeScript mempersempit tipe dalam switch/if berdasarkan pembeda tersebut.

interface Circle { kind: 'circle'; radius: number; }
interface Square { kind: 'square'; side: number; }
type Shape = Circle | Square;

function area(shape: Shape): number {
  switch (shape.kind) {
    case 'circle': return Math.PI * shape.radius ** 2;
    case 'square': return shape.side ** 2;
  }
}

Pemeriksaan Singkat

Apa perbedaan utama antara interface dan type dalam TypeScript?

Ringkasan: Antarmuka

interface menjelaskan struktur objek dengan properti wajib, opsional, dan hanya-baca. Perluas antarmuka dengan extends. Gunakan tanda tangan indeks untuk kunci dinamis. Kelas menerapkan antarmuka. Penggabungan deklarasi hanya tersedia pada antarmuka. TypeScript menggunakan pengetikan struktural—yang penting adalah strukturnya, bukan deklarasi eksplisitnya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Interface dan Tipe Object” gratis?

Ya — teks lengkap “Interface dan Tipe Object” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Frontend Academy, upgrade ke CoddyKit PRO. Kursus Frontend Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Interface dan Tipe Object”?

Deskripsikan bentuk object dengan interface dan type, perluas interface, gunakan properti opsional dengan ?, serta readonly untuk imutabilitas. Kamu berlatih Frontend Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Frontend Academy?

Tidak diperlukan pengalaman sebelumnya. Frontend Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Interface dan Tipe Object” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Frontend Academy ini?

Ya. Setiap pelajaran Frontend Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa TypeScript: Tipe Menangkap Bug saat Kompilasi
  2. Tipe Primitif, Union, dan Alias Tipe
  3. Interface dan Tipe Object
  4. Mengompilasi TS dan tsconfig.json
← Kembali ke Frontend Academy