Kedua-duanya menerangkan bentuk data dan sering saling boleh tukar, tetapi mereka mempunyai keupayaan yang berbeza.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Kedua-duanya menerangkan bentuk data dan sering saling boleh tukar, tetapi mereka mempunyai keupayaan yang berbeza.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype 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 sebarang jenis — primitif, union, tuple, jenis peta. interface hanya menerangkan bentuk objek/fungsi.
interface boleh lakukan yang type tidak bolehinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Antarmuka menyokong penggabungan deklarasi (pelbagai deklarasi bergabung) dan adalah cara idiomatik untuk melanjutkan/menambah, termasuk menambah jenis perpustakaan pihak ketiga.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Konvensi umum: gunakan interface untuk bentuk objek dan API awam (mesej ralat lebih baik, boleh dipanjangkan, boleh digabungkan), dan type apabila anda memerlukan union, tuple, atau operasi jenis lain. Pilih satu sebagai default untuk konsistensi — banyak pasukan lalai kepada interface untuk objek dan mencapai type hanya apabila kekuatan tambahannya diperlukan.