网站搜索

typescript - 运算符 '+' 不能应用于类型 'Number' 和 'Number'。为什么?


我正在尝试创建一个简单的函数,用于在给定的数组中找到最小的两个整数。TypeScript 新手,但熟悉 Javascript,我想知道为什么 TypeScript 会抱怨两个数字相加时出现问题:

const array: Number[] = [
  2, 3, 4, 2, 4, 3, 5, 2, 5, 91, 2, 4, 32, 43, 3, 5, 3435,
];

const twoSmallest = (array: Number[]): Number[] => {
  if (array.length < 2) return array;

  const maxSum = array.reduce((acc: Number, curr: Number):Number => {
    return curr + acc;
  }, 0);

  for (let i = 0; i < array.length; i++) {
    //About to add my rest of the code here
  }
};

console.log('Result = ', twoSmallest(array));

答案#1

Number 是使用 Number 构造函数创建的类型,例如

const someNum = new Number(123);

这会产生奇怪的后果,几乎不应该使用。

对于普通数字——也就是 99% 的时间应该使用的——你只需要使用 number,例如

const array: number[] = [
  2, 3, 4, 2, 4, 3, 5, 2, 5, 91, 2, 4, 32, 43, 3, 5, 3435,
];

将所有的 Number 替换为 number,它就会按预期工作。

当不必要时,你也可以去掉显式注解,TypeScript 会为你推断它们——手动注解越少,错误输入的可能性就越小。