Основы Typescript
2026-02-26 23:04 Diff

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

Rest-оператор

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

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

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

Spread-оператор

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

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

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

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