Аннотировать функцию TypeScript, которая допускает массив или распространение параметров в качестве аргументов? - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу написать функцию с именем printNums(), которая учитывает и:

printNums(1, 2, 3)
printNums([1, 2, 3])

В простом JS функция будет выглядеть примерно так:

function printNums(nums) {
  if (!Array.isArray(nums)) {
    nums = [...arguments]
  }

  nums.forEach(num => {
    console.log(`Num: ${num}`)
  })
}

В TypeScript,как бы я написал / аннотировал nums параметр?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Самый простой способ - это перегрузка:

function printNums(...nums: number[]): void;
function printNums(nums: number[]): void;
function printNums(num1: number | number[], ...nums: number[]) {
  // safer than using [...arguments].
  const normalizedNums = Array.isArray(num1) ? num1 : [num1, ...nums];

  normalizedNums.forEach(num => {
      console.log(`Num: ${num}`)
  })
}
0 голосов
/ 27 февраля 2019

Вы можете использовать перегрузки:

function printNums(...nums: number[]): void
function printNums(nums: number[]): void
function printNums(nums: number[] | number) {
    if (!Array.isArray(nums)) {
        nums = [...arguments] // not type safe but it will work
    }

    nums.forEach(num => {
        console.log(`Num: ${num}`)
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...