Langsung ke konten utama

[Medium] Interface vs Type Alias

1. Apa itu interface dan type?

Bagaimana interface dan type berbeda 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)

Topikinterfacetype
Bentuk objekSangat baikSangat baik
Alias primitifTidak didukungDidukung
Tipe unionTidak didukung langsungDidukung
Tipe tupleTidak didukung langsungDidukung
Declaration mergingDidukungTidak didukung
Tipe mapped/conditionalTerbatasFirst-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 interface untuk kontrak objek sederhana
  • Gunakan type untuk 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.