Стрелочные функции
В стрелочных функциях типы стоят в тех же местах. Тип параметра идёт после его имени, а возвращаемый тип — после скобок, перед стрелкой:
const double = (n: number): number => n * 2;
const describe = (name: string): string => `Герой: ${name}`;
console.log(double(21));
console.log(describe("Кира"));Это выведет:
42
Герой: КираЧитайте (n: number): number => так: «принимает число n и возвращает число». Правила те же, что у функций, записанных через function. Возвращаемый тип можно опустить, и TypeScript определит его сам. Каждый вызов проверяется. А параметр без типа — это ошибка, в том числе в короткой записи без скобок:
const double = (n) => n * 2;
const describe = name => `Герой: ${name}`;main.ts(1,17): error TS7006: Parameter 'n' implicitly has an 'any' type.
main.ts(2,18): error TS7006: Parameter 'name' implicitly has an 'any' type.В JavaScript стрелочную функцию с одним параметром можно записать без скобок: name => .... С типом скобки нужны: (name: string) => .... Без них вы получите не очень понятные ошибки:
const describe = name: string => `Герой: ${name}`;main.ts(1,22): error TS1005: ',' expected.
main.ts(1,31): error TS1005: ';' expected.Возвращаемый тип особенно полезен, когда тело записано в фигурных скобках. Эту ошибку вы знаете по курсу JavaScript: фигурные скобки без return, и функция возвращает undefined. С возвращаемым типом TypeScript её ловит:
const double = (n: number): number => {
n * 2;
};
console.log(double(21));main.ts(1,29): error TS2355: A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value.Без возвращаемого типа программа вывела бы undefined. С фигурными скобками нужно написать return n * 2; или убрать скобки: (n: number): number => n * 2.
У стрелочной функции, которая ничего не возвращает, возвращаемый тип — void, а у функции без параметров скобки пустые: const cheer = (): void => console.log("Ура!");. Значения по умолчанию тоже работают: (health: number, amount: number = 10): number => health + amount.
Задание
- 1
Укажите типы параметров двух стрелочных функций:
power— этоnumber, аname—string. Программа после этого запустится, но во второй строке будетundefined. - 2
Укажите возвращаемые типы обеих стрелочных функций:
numberдляfireballиstringдляspellName. TypeScript сообщит об ошибке вspellName. Исправьте её, чтобы функция возвращала строку. Программа выведет:12 МОРОЗ! 45 - 3
Перепишите функцию
healкак стрелочную, сохранённую вconst heal, с теми же типами параметров и возвращаемым типомnumber. Программа выведет те же строки, что и раньше. - 4
В конце программы выведите
heal(fireball(2), 4): результат одной стрелочной функции сразу попадает в другую, и TypeScript проверяет, что число передано туда, где ожидается число. Программа выведет:12 МОРОЗ! 45 10