TypeScript'теги жалпылоолордун чектөөлөрү
Мурунку сабактардын биринде биз ага берилген параметрдин узундугун чыгарышы керек болгон жалпыланган түрдөгү функция түзгөнбүз. Бирок компиляция убагында бардык түрлөрдүн узундугу боло албагандыктан, бизге ката чыкты:
function myFunc < T > (data: T): T {
console.log(data.length); // ката
return data;
}
Ошол учурда биз жалпыланган түрдү жалпыланган
массив түрүнө өзгөртүп, абалды оңдодук.
Бирок TypeScript'те жалпылоолорду чектөө
мүмкүнчүлүгү бар. Бул үчүн бурчтук кашаада,
T өзгөрмөсүнөн кийин extends
ачкыч сөзүн жазабыз. Андан кийин кымыра
кашаада жаңы str сап түрүндөгү өзгөрмөнү
жазабыз. Функциянын калган коду өзгөрүүсүз
калат:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Демек, жалпыланган түр кымыра кашаада
көрсөтүлгөн str өзгөрмөсүнүн түрүн
мурастайт. Эми келиңиз, биздин функциябыздын
иштерин текшерип, str түрүнө шилтеме
кылган myStr өзгөрмөсүн түзүп, ага
кымыра кашаада маани берели:
let myStr: {str: string} = {str: 'abcde'};
Келиңиз, myFunc функциясын чакыралы,
анын түрүн кайрадан көрсөтүүнү унутпай, жана
myStr өзгөрмөсүн параметр катары берели:
myFunc <{str: string}> (myStr);
Сабакта каралган мисалдын негизинде, сандык массивдин узундугун табуу үчүн функцияны белгилеңиз.