[Medium] Interface vs Type Alias
1. Apa itu interface dan type?
Bagaimana
interfacedantypeberbeda di TypeScript?
Keduanya mendefinisikan tipe, dan keduanya tumpang tindih untuk banyak kasus penggunaan bentuk objek.
interface
interface User {
id: number;
name: string;
email?: string;
}
type
type User = {
id: number;
name: string;
email?: string;
};
Untuk pemodelan objek dasar, keduanya valid.
2. Perbedaan utama (Key Differences)
| Topik | interface | type |
|---|---|---|
| Bentuk objek | Sangat baik | Sangat baik |
| Alias primitif | Tidak didukung | Didukung |
| Tipe union | Tidak didukung langsung | Didukung |
| Tipe tuple | Tidak didukung langsung | Didukung |
| Declaration merging | Didukung | Tidak didukung |
| Tipe mapped/conditional | Terbatas | First-class |
3. Declaration merging
Deklarasi interface dengan nama yang sama digabungkan.
interface Config {
apiBase: string;
}
interface Config {
timeout: number;
}
const cfg: Config = {
apiBase: '/api',
timeout: 5000,
};
type tidak bisa dibuka kembali dengan nama yang sama.
4. Union, tuple, dan komposisi lanjutan
Ini natural dengan type.
type Status = 'idle' | 'loading' | 'success' | 'error';
type Point = [number, number];
type ApiSuccess<T> = { ok: true; data: T };
type ApiFail = { ok: false; message: string };
type ApiResult<T> = ApiSuccess<T> | ApiFail;
5. Extending dan combining
Interface extends
interface Animal {
name: string;
}
interface Dog extends Animal {
bark(): void;
}
Type intersection
type Animal = { name: string };
type Dog = Animal & { bark(): void };
Kedua pola umum digunakan. Pilih yang sesuai dengan konvensi tim Anda.
6. Tipe fungsi (Function Types)
interface Formatter {
(value: string): string;
}
type Parser = (input: string) => number;
Keduanya bekerja baik untuk signature fungsi.
7. Panduan keputusan praktis
Gunakan interface ketika:
- Anda terutama memodelkan kontrak objek
- Anda menginginkan perilaku declaration merging
- Anda mendefinisikan kontrak API publik di library
Gunakan type ketika:
- Anda memerlukan alias union/tuple/primitif
- Anda mengandalkan tipe mapped atau conditional
- Anda ingin menyusun logika tipe yang canggih
8. Rekomendasi untuk sebagian besar tim
- Mulai dengan
interfaceuntuk kontrak objek sederhana - Gunakan
typeuntuk union, tuple, dan pemrograman level tipe - Jaga konsistensi di setiap codebase untuk mengurangi beban kognitif
9. Jawaban cepat wawancara
Q1: Apakah salah satu secara tegas lebih baik?
Tidak. Keduanya sangat tumpang tindih; perbedaan muncul di skenario lanjutan.
Q2: Mengapa penulis library mungkin lebih suka interface?
Declaration merging bisa meningkatkan extensibility untuk consumer.
Q3: Mengapa kode aplikasi mungkin lebih suka type?
Kode aplikasi sering menggunakan union dan komposisi bergaya utility.