TypeScript adalah superset dari JavaScript. TypeScript menawarkan cara bagi kita untuk mendefinisikan suatu tipe data dalam kode JavaScript yang kita buat.
Ketika bekerja dengan TypeScript, kita harus mendefinisikan struktur objek atau tipe data, dan di sini kita akan bertemu dengan dua fitur utama: type dan interface.
Jika kita lihat sekilas, mereka sangat mirip. Namun masing-masing mempunyai ciri khas tersendiri, baik dari cara penggunaan, fleksibilitar maupun performanya.
Pada artikel kali ini kita akan mempelajari apa saja perbedaan antara type
dan interface
, yang nantinya dapat membantu kalian dalam mengembangkan aplikasi.
Berikut merupakan contoh perbandingan type & interface.
interface Animal { name: string}
interface Bear extends Animal { honey: boolean}
const bear = getBear()bear.namebear.honey
type Animal = { name: string}
type Bear = Animal & { honey: boolean}
const bear = getBear();bear.name;bear.honey;
Sumber: TypeScript Handbook
Penjelasan Mengenai “type”
Di TypeScript, type digunakan untuk mendefinisikan tipe data kompleks dengan mengkombinasikan berbagai macam tipe, seperti tipe primitif, union, intersection, tuple, dan tipe lainnya.
Fitur Penting type
- Union & Intersection type: kita dapat mendefinisikan dan mengkombinasikan satu tipe dengan tipe yang lain.
- Primitive:
type
dapat digunakan untuk mendefinisikan tipe primitif seperti numbers, strings, boolean. - Array & Tuple: kita juga dapat menggunakan
type
untuk mendefinisikan sebuah tuple atau array secara spesifik. - Dapat merepresentasikan type yg lebih complex, seperti conditional type atau mapped type
Contoh penggunaan type
:
// union typetype Color = "red" | "green" | "blue";
// primitive typetype Age = number;
// function typetype SumFunction = (a: number, b: number) => number;
// tuple typetype DataTypes = [number, string];
// object typetype User = { name: string; age: number;};
// conditional typeinterface Animal {}interface Dog extends Animal {}
type Ex1 = Dog extends Animal ? number : string; // type of Ex1 = numbertype Ex2 = RegExp extends Animal ? number : string; // type of Ex2 = string
Gunakan type ketika:
- Ketika ingin mengkombinasikan berbagai macam tipe data menggunakan union atau intersection.
- Ketika ingin menggunakan tipe data yg kompleks seperti function atau tuple.
- Ketika ingin merepresentasikan tipe data primitif.
Penjelasan Mengenai “interface”
Sebuah interface
di TypeScript digunakan untuk mendefinisikan strukur sebuah objek. Hal utama yg sering digunakan yaitu untuk menentukan bentuk sebuah objek atau kelas, baik dari property maupun methods.
Tidak seperti type
, sebuah interface
lebih di fokuskan untuk rancangan object oriented pada kode yang kita buat.
Fitur Penting interface
- Object Shape: digunakan untuk mendefine atau menentukan struktur suatu
object
danclass
. - Extensibility: kita dapat
extend
interface yg lain, sehingga dapat memungkinkan untuk penggunaaninheritance
&composition
. - Declaration Merging: Jika Anda mendefinisikan
interface
dengan nama yang sama beberapa kali, TypeScript akan menggabungkannya menjadi satuinterface
.
// Define the shape of an objectinterface User { name: string; age: number;}
// Extending interfacesinterface Admin extends User { role: string;}
// Implementation of the interface in a classclass Person implements User { name: string; age: number;
constructor(name: string, age: number) { this.name = name; this.age = age; }}
Gunakan interface ketika:
- Ketika bekerja dengan
object
atauclass
. - Ketika memerlukan adanya
extensibility
daninheritance
. - Ketika ingin menggunakan declaration merging, dimana
interface
kita definisikan beberapa kali.
Tabel Perbandingan
Berikut tabel praktis perbandingan type
vs interface
Aspect | Type | Interface |
---|---|---|
Can describe functions | ✅ | ✅ |
Can describe constructors | ✅ | ✅ |
Can describe tuples | ✅ | ✅ |
Interfaces can extend it | ⚠️ | ✅ |
Classes can extend it | 🚫 | ✅ |
Classes can implement it (implements) | ⚠️ | ✅ |
Can intersect another one of its kind | ✅ | ⚠️ |
Can create a union with another one of its kind | ✅ | 🚫 |
Can be used to create mapped types | ✅ | 🚫 |
Can be mapped over with mapped types | ✅ | ✅ |
Expands in error messages and logs | ✅ | 🚫 |
Can be augmented | 🚫 | ✅ |
Can be recursive | ⚠️ | ✅ |
Sumber: React TypeScript Cheatsheet
Kesimpulan
Baik type
maupun interface
, keduannya memiliki kelebihan masing-masing. Secara umum interface
kita gunakan saat kita ingin menentukan bentuk dan tipe data sebuah object, sedangkan type
digunakan untuk menentukan tipe data yang lebih kompleks seperti union, intersection, primitive, dll.
Dengan mengetahui perbedaan antara type
dan interface
dapat membantu kita sebagai developer dalam menentukan pilihan kita nantinya saat mengembangkan proyek yang dibuat.
Meskipun perbedaannya mungkin terlihat tidak terlalu besar, memilih yang tepat dapat membuat kode Anda lebih terstruktur dan mudah untuk dipelihara.