Ограничения обобщений в 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);
На основе примера, рассмотренного в уроке, задайте функцию для нахождения длины числового массива.