注释一个TypeScript函数,该函数允许将数组或参数的散列用作参数?

时间:2019-02-27 14:15:12

标签: typescript annotations

我想编写一个名为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 :(得分:2)

最简单的方法是重载:

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}`)
  })
}

答案 1 :(得分:1)

您可以使用重载:

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}`)
    })
}