Руководство о том, как работает тип параметров TypeScript
4 мая 2022 г.Тип TypeScript Parameters
используется для получения параметров или аргументов функции и создания на их основе нового типа. Это весьма полезно, когда мы знаем, что ввод «Функции» соответствует определенному типу, и мы хотим воспроизвести это.
В этом руководстве рассмотрим, как работает тип утилиты Параметры
.
Пользовательские типы TypeScript
В этом руководстве рассматриваются пользовательские типы. Если вы не знакомы с пользовательскими типами, прочитайте мое руководство по пользовательским типам здесь.
Как работает тип параметров
Представьте, что у вас есть функция с заданным количеством аргументов. Например, вот функция TypeScript с двумя параметрами или аргументами, a
и b
:
```машинопись
const myFunction = (a: строка, b: строка) => {
вернуть а + б;
Допустим, мы хотим запустить эту функцию. Один из способов — передать массив с типом кортежа, три точки. Например:
```машинопись
const myFunction = (a: строка, b: строка) => {
вернуть а + б;
let passArray:[строка, строка] = ['привет', 'мир']
// Возвращает «привет мир»
мояФункция(...МассивПередачи);
Здесь мы определяем кортеж, который представляет собой просто [строка, строка]
, который мы можем передать в myFunction, удовлетворяя аргументы a
и b
.
Это прекрасно работает, но что, если аргументы myFunction
изменятся? Это особенно вероятно, если myFunction
исходит от стороннего сценария. Затем нам нужно будет не только обновить нашу функцию, но и не забыть обновить тип кортежа, который мы передаем. Нам также нужно будет оставаться в курсе пакета myFunction
, если он изменится.
Вместо этого, если мы хотим, чтобы они всегда совпадали, мы можем использовать «Параметры» для создания одного и того же типа. Это создаст тип аргументов кортежа вместо того, чтобы определять его вручную:
```машинопись
тип myType = Параметры
// Эквивалентно типу кортежа:
// введите myType = [a: строка, b: строка]
Это избавляет нас от некоторых хлопот при определении пользовательских типов, так как теперь мы можем передавать любой тип myType
в myFunction
, не опасаясь ошибки:
```машинопись
const myFunction = (a: строка, b: строка) => {
вернуть а + б;
тип myType = Параметры
пусть myArray:myType = ['привет', 'мир'];
мояФункция(...мойМассив)
Ввод конкретных параметров с помощью Parameter Utility Type
Типы параметров также достаточно гибки и позволяют нам определять больше, чем просто полный набор аргументов.
Например, если мы хотим сопоставить только тип первого аргумента в нашей функции myFunction
, мы можем сослаться на него как на простой массив, добавив [0]
. Следующее будет соответствовать типу a
, но если мы хотим соответствовать типу b
, мы могли бы использовать [1]
:
```машинопись
тип myType = Параметры<тип моей функции>[0]
// Эквивалент 'строки'
Таким образом, мы могли бы определить пользовательские типы для каждого аргумента, если это необходимо в нашем коде. Например, здесь мы определяем два пользовательских типа для первого и второго параметров функции и передаем их оба в нашу функцию:
```машинопись
const myFunction = (a: строка, b: строка) => {
вернуть а + б;
type aType = Parameters
тип bType = Параметры<тип моей функции>[1]
пусть a:aType = 'привет'
пусть b:bType = 'мир'
моя функция (а, б)
Больше удовольствия с параметрами
Так как Parameters
преобразует тип аргументов в новый тип, мы также можем передать функцию прямо в него. Ниже будет создан тип [a: строка, b: число]
. Это менее полезно, чем получение параметров из конкретной функции, но в определенных ситуациях может пригодиться:
```машинопись
введите otherType = Parameters<(a: строка, b: число) => void>
Оригинал