АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗tsSpGnIms 35 of 37 menu
НОВИНКА: Практика на Реальных Проектах и Работы в Портфолио. Бесплатный курс! Жми для записи!

Ограничения обобщений в 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);

На основе примера, рассмотренного в уроке, задайте функцию для нахождения длины числового массива.

enru