Могу ли я создать функцию-обертку с помощью TypeScript, используя распространенный синтаксис, без указания аргументов и типов? - PullRequest
3 голосов
/ 20 марта 2020

Следующий код является распространенным и очень аккуратным способом реализации функций-оболочек в JavaScript.

Код обертывает innerFunction (который имеет несколько именованных аргументов) в оболочку outerFunction:

function innerFunction(firstArgument, secondArgument, thirdArgument) {
  console.log('innerFunction', arguments);
}

function outerFunction() {
  console.log('outerFunction', arguments);
  innerFunction(...arguments)
}

outerFunction(1, 2, 3);

Это прекрасно работает как JavaScript - вы можете видеть, что outerFunction передает любые аргументы innerFunction:

outerFunction [Arguments] { '0': 1, '1': 2, '2': 3 }
innerFunction [Arguments] { '0': 1, '1': 2, '2': 3 }

Typescript не делает ' Это так, потому что он хочет, чтобы я помещал типы внутренних функций во внешнюю функцию.

Есть ли лучший способ сделать это в TypeScript? Конечно, анализ состояния TypeScript c позволяет увидеть, что внешняя функция получает свои типы из внутренней функции?

I принять ответ может быть «нет, вы должны добавить типы внутренней функции к внешней функции». Но я бы хотел посоветоваться с моими коллегами на случай, если есть лучший способ сделать это.

1 Ответ

3 голосов
/ 20 марта 2020

Typescript предлагает тип утилиты Параметры , который дает вам типы параметров функции в виде кортежа. Таким образом, вы должны напечатать внешнюю функцию следующим образом:

function innerFunction(firstArgument: string, secondArgument: number, thirdArgument: boolean) {
  console.log('innerFunction', firstArgument, secondArgument, thirdArgument);
}

function outerFunction(...args: Parameters<typeof innerFunction>) {
  console.log('outerFunction', ...args);
  innerFunction(...args);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...