Keduanya mendeskripsikan bentuk data dan sering kali dapat saling ditukar, tetapi memiliki kemampuan yang berbeda.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Keduanya mendeskripsikan bentuk data dan sering kali dapat saling ditukar, tetapi memiliki kemampuan yang berbeda.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Kemampuan yang dapat dilakukan type tetapi interface tidak
type ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type adalah alias umum untuk tipe apa pun — primitives, unions, tuples, mapped types. interface hanya mendeskripsikan bentuk object/function.
interface tetapi type tidakinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interface mendukung declaration merging (deklarasi ganda bergabung) dan merupakan cara idiomatik untuk memperluas/meningkatkan, termasuk meningkatkan tipe pustaka pihak ketiga.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Konvensi umum: gunakan interface untuk bentuk object dan API publik (pesan error yang lebih baik, dapat diperluas, dapat digabungkan), dan type saat Anda membutuhkan unions, tuples, atau operasi tipe lainnya. Pilih satu sebagai default untuk konsistensi — banyak tim yang menggunakan interface secara default untuk object dan menggunakan type hanya ketika kekuatannya diperlukan.