Sekatan Generik dalam TypeScript
Dalam salah satu pelajaran sebelumnya, kami mencipta fungsi jenis generik yang sepatutnya mengeluarkan panjang parameter yang dihantar ke dalamnya. Walau bagaimanapun, semasa pengkompilannya kami mendapat ralat, kerana tidak semua jenis boleh mempunyai panjang:
function myFunc < T > (data: T): T {
console.log(data.length); // ralat
return data;
}
Dalam kes itu, kami membetulkan keadaan dengan menukar
jenis generik kepada jenis tatasusunan generik.
Tetapi dalam TypeScript terdapat keupayaan untuk mencipta
sekatan generik. Untuk melakukan ini, dalam kurungan sudut,
selepas pembolehubah T kita tulis
kata kunci extends. Selepas itu
dalam kurungan kerinting kami tulis pembolehubah
baru str daripada jenis rentetan.
Selebihnya kod fungsi akan kekal tanpa
perubahan:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Jadi, jenis generik mewarisi jenis
pembolehubah str yang dinyatakan dalam kurungan
kerinting. Sekarang mari kita semak kerja
fungsi kami dan buat pembolehubah myStr,
yang merujuk kepada jenis str, dan tetapkan
nilai kepadanya dalam kurungan kerinting:
let myStr: {str: string} = {str: 'abcde'};
Mari kita panggil fungsi myFunc, tanpa
lupa untuk menyatakan jenisnya sekali lagi dan hantar
pembolehubah myStr sebagai parameter:
myFunc <{str: string}> (myStr);
Berdasarkan contoh yang dibincangkan dalam pelajaran, tetapkan fungsi untuk mencari panjang tatasusunan nombor.