Итоги
В этом уроке вы узнали, что:
- У каждого параметра должен быть тип:
function heal(health: number, amount: number). Без него TypeScript сообщаетParameter 'health' implicitly has an 'any' type.(TS7006). Каждый вызов проверяется: неверный аргумент даёт TS2345. - Возвращаемый тип ставится после скобок:
function damage(power: number, armor: number): number {. Если его опустить, TypeScript определит его сам. Если записать, TypeScript проверит тело функции по нему: ветка безreturnдаёт TS2366, значение не того типа — TS2322. void— возвращаемый тип функций, которые ничего не возвращают:function printHero(name: string): void. Их результат использовать нельзя, напримерtitle.toUpperCase()даётProperty 'toUpperCase' does not exist on type 'void'.Если нужно значение, возвращайте его.- В вызове должно быть столько аргументов, сколько у функции параметров:
Expected 2 arguments, but got 1.(TS2554). Когда вы добавляете параметр, TypeScript показывает каждый вызов, который нужно изменить. - Необязательный параметр отмечается вопросительным знаком:
title?: string. Внутри функции его тип —string | undefined, поэтому проверяйте его перед использованием:if (title === undefined) { ... }. Необязательные параметры ставятся последними. - Параметр со значением по умолчанию,
power: number = 10или простоpower = 10, тоже необязателен, но внутри функции он никогда не равенundefined. - В стрелочных функциях типы стоят в тех же местах:
const double = (n: number): number => n * 2;. Параметру с типом нужны скобки. - У функции тоже есть тип:
(power: number) => number. Ему можно дать имя,type Strike = (power: number) => number;, и использовать для параметров, в которых хранится функция. Передавайте саму функцию, без скобок. mapсоздаёт новый массив из результатов функции:chests.map(gold => gold * 2).filterоставляет элементы, для которых функция вернулаtrue:monsters.filter(monster => monster.power > 10). Параметр получает тип от массива, поэтому аннотация ему не нужна.
Дальше вас ждёт небольшой мини-проект, таблица результатов соревнования по стрельбе из лука, который вы напишете самостоятельно, используя всё из первых трёх уроков. Затем в уроке об объектных типах вы научитесь описывать, как выглядят объекты: какие у них свойства и каких они типов. После этого TypeScript будет проверять каждого героя, предмет и монстра в вашей программе.
Задание
- 1
Давайте потренируемся. Напишите стрелочную функцию, сохранённую в
const heal, с параметрамиhealthиamount, оба типаnumber, параметромmaxHealthсо значением по умолчанию50и возвращаемым типомnumber. Она возвращаетhealth + amount, но не большеmaxHealth. - 2
Выведите
heal(20, 15),heal(40, 35)иheal(40, 35, 100). Программа выведет:35 50 75 - 3
С помощью
filterоставьте зелья, которые восстанавливают больше 15, а затем с помощьюmapпревратите каждое из них в строку вида+20 здоровья. Сохраните результат вlabels. После этого напишите функциюprintAllс параметромlinesтипаstring[]и возвращаемым типомvoid, которая выводит каждый элементlinesв отдельной строке, и вызовитеprintAll(labels). В конце программа выведет:+20 здоровья +35 здоровья +50 здоровья