Interface & Type Alias
Ringkasan Pelajaran
Pelajari cara mendefinisikan bentuk data yang kompleks dan perbedaan antara interface dan type alias.
Interface & Type Alias
Dalam TypeScript, ada dua cara utama untuk mendefinisikan “bentuk” (shape) dari sebuah objek: Interface dan Type Alias. Meskipun keduanya sangat mirip dan sering kali dapat digunakan secara bergantian, mereka memiliki perbedaan mendasar yang penting untuk dipahami.
Interface
Sebuah interface adalah cara yang kuat untuk mendefinisikan kontrak untuk sebuah objek. Ia mendeskripsikan properti dan metode apa yang harus dimiliki oleh sebuah objek.
interface User {
id: number;
name: string;
email: string;
isActive: boolean;
}
const newUser: User = {
id: 1,
name: "Rachmat Hidayat",
email: "[email protected]",
isActive: true
};
Properti Opsional
Anda dapat menandai properti sebagai opsional menggunakan simbol ?.
interface User {
id: number;
name: string;
namaTengah?: string; // Opsional
}
Type Alias
Alias type memungkinkan Anda untuk membuat nama baru untuk tipe apa pun, bukan hanya bentuk objek. Ini mencakup tipe primitif, union, dan tuple.
type ID = string | number;
type Point = { x: number; y: number };
const userId: ID = 101;
const center: Point = { x: 0, y: 0 };
Interface vs. Type Alias
1. Ekstensibilitas (Merging)
Interface bersifat terbuka, artinya Anda dapat mendeklarasikan interface yang sama beberapa kali dan TypeScript akan menggabungkannya (merging) menjadi satu. Type alias bersifat tertutup dan tidak dapat diubah setelah didefinisikan.
interface Window {
title: string;
}
interface Window {
width: number;
}
// Hasil Penggabungan: { title: string; width: number }
2. Heritage (Extending)
Keduanya dapat memperluas (extend) tipe lain, tetapi sintaksisnya berbeda.
// Interface memperluas interface
interface Animal { name: string }
interface Bear extends Animal { honey: boolean }
// Type memperluas type (menggunakan Intersection)
type AnimalType = { name: string };
type BearType = AnimalType & { honey: boolean };
Mana yang harus Anda gunakan?
Rekomendasi umum dari tim TypeScript adalah menggunakan Interface untuk bentuk objek jika memungkinkan, terutama jika Anda mengharapkan tipe tersebut akan diperluas. Gunakan Type Alias saat Anda perlu mendefinisikan union, tuple, atau tipe non-objek.