Абмежаванні абагульненняў у 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, указанай у фігурных
дужках. Цяпер давайце праверым працу
нашай функцыі і створым зменную myStr,
якая спасылаецца на тып str, і зададзім
ёй значэнне ў фігурных дужках:
let myStr: {str: string} = {str: 'abcde'};
Давайце выклічам функцыю myFunc, не
забываючы зноў указаць яе тып і перададзім
зменную myStr як параметр:
myFunc <{str: string}> (myStr);
На аснове прыкладу, разгледжанага ў уроку, задайце функцыю для знаходжання даўжыні лікавага масіва.