Overload Fungsi dalam TypeScript
Kadang-kadang terdapat fungsi-fungsi yang mengembalikan nilai, yang tipenya bergantung pada parameter yang diteruskan. Untuk ini, TypeScript menggunakan overload fungsi. Ini memungkinkan untuk menentukan berbagai varian tanda tangan fungsi.
Mari kita lihat sebuah contoh. Misalkan kita memiliki fungsi yang memisahkan karakter string menjadi array huruf:
function splitStr(str: string): string[] {
return str.split('');
}
Misalkan kita juga memiliki fungsi yang memisahkan karakter angka menjadi array digit:
function splitNum(num: number): number[] {
let str: string = String(num);
let arr: string[] = str.split('');
return arr.map(elem => +elem);
}
Mari gabungkan kedua fungsi menjadi satu. Fungsi baru ini, bergantung pada tipe parameternya, harus mengembalikan array angka atau array string.
Gunakan overload untuk mendeklarasikan berbagai tanda tangan fungsi kita:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
// implementasi kedua tanda tangan
}
Sekarang tuliskan implementasi fungsi. Dalam kodenya, kita harus menentukan dengan kondisi, tanda tangan fungsi mana yang terpicu, dan bergantung pada itu, jalankan kode yang sesuai dengan hasil tipe yang benar:
function splitVal(val: number): number[];
function splitVal(val: string): string[] {
if (typeof val === 'string') {
return val.split('');
} else {
let str: string = String(val);
let arr: string[] = str.split('');
return arr.map((elem: string): number => +elem);
}
}
Berbeda dengan bahasa lain, dalam TypeScript overload dibuat sebagai satu fungsi. Tidak mungkin membuat beberapa fungsi dengan satu nama, tetapi dengan tanda tangan yang berbeda.
Tulis sebuah fungsi yang akan mengembalikan atau mengubah teks elemen DOM. Fungsi ini harus berkerja sebagai berikut:
text('#elem', 'text'); // akan mengatur teks
text('#elem'); // akan mengembalikan teks saat ini