Зарегистрируйтесь, чтобы продолжить обучение

Операции Rest и Spread Основы Typescript

В этом уроке разберем rest- и spread-операторы.

Rest-оператор

Rest-оператор позволяет создавать функции с переменным числом параметров, при этом сворачивать их в массив:

function max(...numbers: number[]): number {
  return Math.max(...numbers)
}

Этот массив является обычным параметром функции, поэтому ему задается тип в соответствии с ожидаемыми значениями внутри этого массива. Пример с двумя параметрами:

function calculate(operation: string, ...numbers: number[]) {
  // Выполняем операцию operation для всех numbers
}

В этом смысле rest-оператор в TypeScript ничем не отличается от rest-оператора в JavaScript. А вот со spread-оператором есть одна особенность.

Spread-оператор

Spread-оператор в функциях — это как rest-оператор наоборот. Он позволяет раскладывать массив на отдельные параметры:

const numbers = [1, 2, 3]
Math.max(...numbers)

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

function sum(a: number, b: number): number {
  return a + b
}

// Выведенный тип number[] — ноль или больше чисел,
// а не массив из двух чисел
const args = [1, 2]
sum(...args)
// A spread argument must either have a tuple type
// or be passed to a rest parameter.

Массивы в JavaScript изменяемы, поэтому TypeScript не может полагаться на количество элементов в конкретный момент времени. Есть разные способы обойти это ограничение. Но в этой ситуации проще использовать Type Assertion — указание компилятору, что мы точно знаем о коде:

const args = [1, 2] as const

Подробнее о Type Assertion поговорим в модуле о типах. С его помощью мы явно указываем, что этот массив состоит из двух конкретных значений, которые не поменяются.

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff