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:

typescriptfunction 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:

typescriptfunction 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:

typescriptlet myStr: {str: string} = {str: 'abcde'};

Mari kita panggil fungsi myFunc, tanpa lupa untuk menyatakan jenisnya sekali lagi dan hantar pembolehubah myStr sebagai parameter:

typescriptmyFunc <{str: string}> (myStr);
Задание 1

Berdasarkan contoh yang dibincangkan dalam pelajaran, tetapkan fungsi untuk mencari panjang tatasusunan nombor.