Penggunaan Parameter Tipe dalam Batasan Generik di TypeScript
TypeScript juga memiliki kemampuan mendeklarasikan satu parameter tipe, yang akan dibatasi oleh parameter tipe lainnya. Ini diperlukan ketika kita harus menyalin properti dari satu objek ke objek lain, sambil melindungi diri dari kemungkinan kita mengirimkan properti yang tidak diperlukan.
Mari kita lihat contoh berikut. Kembali
ke fungsi myFunc yang menentukan
panjang variabel:
function myFunc <T> (data: T): T {
console.log(data.length); // error
return data;
}
Namun sekarang kita ingin fungsi ini
hanya bekerja dengan tipe-tipe yang
memiliki properti length. Untuk itu, buatlah
interface ILength, dan berikan
properti length bertipe number:
interface ILength {
length: number;
}
Selanjutnya, dalam fungsi kita, tentukan tipe generik
yang mewarisi dari ILength
melalui kata kunci extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Berikut adalah kode lengkap kita:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Mari kita uji fungsi kita dan cari panjang string:
console.log(myFunc('abcde'));
Hasil kode yang dijalankan:
5
'abcde'
Sekarang mari kita berikan array sebagai parameter:
console.log(myFunc(['a', 'b', 'c']));
Hasil kode yang dijalankan:
3
[ 'a', 'b', 'c' ]