Tipe Interseksi dalam TypeScript

Tipe Interseksi dalam TypeScript

Artikel ini menjelaskan tipe interseksi dalam TypeScript.

YouTube Video

Tipe Interseksi dalam TypeScript

Dalam TypeScript, tipe interseksi adalah cara untuk menggabungkan beberapa tipe untuk membuat tipe baru.

Apa itu Tipe Interseksi?

Tipe interseksi memungkinkan Anda menggabungkan beberapa tipe untuk mendefinisikan tipe baru dengan semua properti dari tipe-tipe tersebut. Tipe interseksi didefinisikan dengan menggunakan simbol & dan memerlukan semua properti dari setiap tipe penyusun.

Contoh:

1type A = { name: string };
2type B = { age: number };
3
4type C = A & B;
5
6const person: C = {
7    name: "John Doe",
8    age: 30
9};

Dalam kode ini, dengan mendefinisikan type C = A & B, tipe C menjadi tipe objek dengan properti name (tipe string) dan age (tipe number).

Manfaat Tipe Interseksi

Dengan menggunakan tipe interseksi, Anda dapat menggunakan kembali tipe yang sudah ada dan mendefinisikan tipe yang lebih fleksibel dan komposit. Ini meningkatkan pemeliharaan dan perluasan kode Anda. Selain itu, tipe interseksi dapat menerapkan batasan dari beberapa tipe berbeda secara bersamaan, sehingga meningkatkan keamanan tipe.

Manfaat:

  • Penggunaan Ulang: Dengan menggabungkan beberapa tipe, Anda dapat mengurangi definisi yang berulang dan menggunakan kembali tipe yang sudah ada.
  • Keamanan Tipe: Tipe interseksi meningkatkan pengecekan tipe dengan hanya mengizinkan objek yang memenuhi kondisi dari beberapa tipe.

Kasus Penggunaan Tipe Interseksi

Tipe interseksi sangat berguna saat memperluas objek atau antarmuka. Khususnya, ini berguna saat Anda ingin merepresentasikan objek dengan beberapa properti.

Kasus Penggunaan 1: Objek dengan Beberapa Antarmuka

 1interface Drivable {
 2    drive(): void;
 3}
 4
 5interface Flyable {
 6    fly(): void;
 7}
 8
 9type Vehicle = Drivable & Flyable;
10
11const car: Vehicle = {
12    drive() {
13        console.log("Driving on the road");
14    },
15    fly() {
16        console.log("Flying in the sky");
17    }
18};
19
20car.drive(); // "Driving on the road"
21car.fly();   // "Flying in the sky"

Dalam contoh ini, tipe Vehicle didefinisikan sebagai tipe interseksi yang menggabungkan Drivable dan Flyable. Objek dengan tipe Vehicle harus mengimplementasikan kedua metode drive() dan fly().

Kasus Penggunaan 2: Menggabungkan Kelas dan Tipe Interseksi

Dengan menggabungkan kelas dan tipe interseksi, dimungkinkan untuk membuat objek yang memiliki properti dari beberapa antarmuka.

 1interface Person {
 2    name: string;
 3}
 4
 5interface Employee {
 6    employeeId: number;
 7}
 8
 9type PersonEmployee = Person & Employee;
10
11class CompanyWorker implements PersonEmployee {
12    constructor(public name: string, public employeeId: number) {}
13
14    getDetails() {
15        return `${this.name}, Employee ID: ${this.employeeId}`;
16    }
17}
18
19const worker = new CompanyWorker("Alice", 123);
20console.log(worker.getDetails()); // "Alice, Employee ID: 123"

Di sini, kami menggunakan tipe interseksi PersonEmployee dari Person dan Employee untuk membuat kelas CompanyWorker memiliki properti dari keduanya.

Poin yang Perlu Dipertimbangkan dengan Tipe Persilangan

Poin penting saat menggunakan tipe persilangan adalah menyadari kemungkinan konflik properti. Jika properti dengan nama yang sama memiliki anotasi tipe yang berbeda di berbagai tipe, kesalahan dapat terjadi.

Contoh Perhatian:

1type A = { id: number };
2type B = { id: string };
3
4type C = A & B;
5
6// Error: Type 'number' and 'string' are not compatible
7const obj: C = {
8    id: 1
9};

Dalam contoh ini, properti id dari A dan B bertabrakan, menyebabkan kesalahan saat mendefinisikan objek dengan tipe C. Dalam kasus seperti itu, tinjauan desain diperlukan untuk menghindari konflik properti.

Contoh Kode dengan Anotasi Tipe untuk Tipe Persilangan

Akhirnya, berikut adalah contoh kode nyata yang mencakup anotasi tipe.

Contoh 1: Menampilkan Detil Objek

 1type ContactInfo = { phone: string; email: string };
 2type Address = { city: string; postalCode: string };
 3
 4type PersonDetails = ContactInfo & Address;
 5
 6const details: PersonDetails = {
 7    phone: "123-4567",
 8    email: "example@mail.com",
 9    city: "New York",
10    postalCode: "10001"
11};
12
13console.log(details);

Contoh 2: Objek dengan Properti Tambahan

 1interface BasicInfo {
 2    name: string;
 3    age: number;
 4}
 5
 6interface WorkInfo {
 7    company: string;
 8    position: string;
 9}
10
11type FullInfo = BasicInfo & WorkInfo;
12
13const employee: FullInfo = {
14    name: "Bob",
15    age: 28,
16    company: "Tech Corp",
17    position: "Engineer"
18};
19
20console.log(`${employee.name} is a ${employee.position} at ${employee.company}`);

Kesimpulan

Tipe persilangan dalam TypeScript adalah fitur kuat untuk menggabungkan beberapa tipe ke dalam tipe baru. Ini meningkatkan kegunaan kembali kode dan keamanannya, memungkinkan definisi tipe yang kompleks. Dengan memanfaatkan fleksibilitas desain secara efektif sambil berhati-hati terhadap konflik tipe, Anda dapat mencapai kode yang kuat dan sangat mudah dibaca.

Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.

YouTube Video