Что такое Тип параметров? Это служебный тип в TypeScript, который позволяет нам принимать аргументы функции и превращать их в новый тип.
Тип TypeScript Parameters
используется для получения параметров или аргументов функции и создания на их основе нового типа. Это весьма полезно, когда мы знаем, что ввод Function
соответствует определенному типу, и мы хотим воспроизвести это. В этом руководстве мы рассмотрим, как работает тип утилиты Parameters
.
Пользовательские типы TypeScript
В этом руководстве рассматриваются пользовательские типы. Если вы новичок в пользовательских типах, прочитайте мое руководство по пользовательским типам здесь.
Как работает тип параметров
Представьте, что у вас есть функция с заданным количеством аргументов. Например, вот функция TypeScript с двумя параметрами или аргументами, a
и b
:
const myFunction = (a: string, b: string) => {
return a + b;
}
Допустим, мы хотим запустить эту функцию. Один из способов — передать массиву типа кортеж оператор три точки. Например:
const myFunction = (a: string, b: string) => { return a + b; }
let passArray:[string, string] = [ 'hello ', 'world' ]
// Returns 'hello world' myFunction(...passArray);
Здесь мы определяем кортеж, который представляет собой просто [string, string]
, который мы можем передать в myFunction, удовлетворяя оба аргумента a
и b
.
Это прекрасно работает, но что, если аргументы myFunction
изменятся? Это особенно вероятно, если myFunction
исходит от стороннего скрипта. Тогда нам нужно будет не только обновить нашу функцию, но и не забыть обновить тип кортежа, который мы передаем. Нам также нужно будет оставаться в курсе пакета myFunction
на случай, если он изменится.
Вместо этого, если мы хотим, чтобы они всегда совпадали, мы можем использовать Parameters
для создания одного и того же типа. Это создаст тип аргументов кортежа, вместо того, чтобы определять его вручную:
type myType = Parameters<typeof myFunction>
// Equivalent to a tuple type of:
// type myType = [ a: string, b: string ]
Это избавляет нас от некоторых хлопот при определении пользовательских типов, поскольку теперь мы можем передать любой тип myType
в myFunction
, не опасаясь ошибки:
const myFunction = (a: string, b: string) => { return a + b; }
type myType = Parameters<typeof myFunction>
let myArray:myType = [ 'hello ', 'world' ];
myFunction(...myArray)
Ввод определенных параметров с помощью типа Parameter Utility
Типы параметров также достаточно гибки и позволяют нам определять больше, чем просто полный набор аргументов. Например, если мы хотим сопоставить только тип первого аргумента в нашей функции myFunction
, мы можем сослаться на него как на простой массив, добавив [0]
. Следующее будет соответствовать типу a
, но если мы хотим соответствовать типу b
, мы можем использовать [1]
:
type myType = Parameters<typeof myFunction>[0]
// Equivalent of 'string'
Таким образом, мы могли бы определить пользовательские типы для каждого аргумента, если это необходимо в нашем коде. Например, здесь мы определяем два пользовательских типа для первого и второго параметров функции и передаем их оба в нашу функцию:
const myFunction = (a: string, b: string) => { return a + b; }
type aType = Parameters<typeof myFunction>[0] type bType = Parameters<typeof myFunction>[1]
let a:aType = 'hello ' let b:bType = 'world'
myFunction(a, b)
Больше удовольствия с параметрами
Поскольку Parameters
преобразует тип аргументов в новый тип, мы также можем передать функцию прямо в него. Ниже будет создан тип [ a: string, b: number ]
. Это менее полезно, чем получение параметров из конкретной функции, но в определенных ситуациях может пригодиться:
type anotherType = Parameters<(a: string, b: number) => void>
Это для этой темы. Спасибо за чтение.
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.