【问题标题】:When trying to find the maximum number in TypeScript, I am getting this error: Type 'string' is not assignable to type 'number'尝试在 TypeScript 中查找最大数字时,出现此错误:Type 'string' is not assignable to type 'number'
【发布时间】:2020-12-23 06:55:16
【问题描述】:

我目前正在学习 TypeScript,我正在尝试在 Codewars 上解决这个 Kata。我能够在 JavaScript 中解决它,但是当我尝试在 TypeScript 中解决它时,我收到了一个错误,如下所述。我使用与我的 JavaScript 答案相同的方法来回答 TypeScript 版本。

问题来了:给定一个数字,我要返回最大的数字。所以如果我输入 213,我应该返回 312,如下所示:

maxNumber (213) ==> return (321)

这是我为 JavaScript 提出的解决方案。

    function maxNumber(number) {
  
    var num = String(number).split('').sort().reverse().join('');
    return num;
    }

   const answer = maxNumber(1234)
    console.log(answer)
    //Output: 4321

我尝试了同样的方法,但在 TypeScript 中,但我不断收到错误消息:Type 'string' is not assignable to type 'number'。

export function maxNumber(n: number): number {
  var num = String(n).split('').sort().reverse().join('');
  return num;
}

const answer = maxNumber(1234)
console.log(answer)

然后我对该错误的响应是获取正在输入的数字,将其转换为字符串,然后使用 split 方法将其转换回数组内的数字,但我收到相同的错误消息.

export function maxNumber(n: number): number {
  var num = n.toString();
  
  var numNew = num.split('').sort().reverse().join('');
   
  return numNew;
  
}

const answer = maxNumber(1234)
console.log(answer)

我知道它在说什么,但我无法将类型字符串分配给n,然后返回一个数字。有没有办法来解决这个问题?我知道由于使用了 TypeScript,它应该会发现这样的错误,而仅使用 JavaScript 时可能找不到。

【问题讨论】:

  • 那个函数确实返回一个字符串,你期待什么?
  • TypeScript 并没有抱怨 num 是一个应该是字符串的数字,而是 numNew 是一个应该是数字的字符串。

标签: javascript typescript


【解决方案1】:

您可以使用 parseInt 将值作为数字返回:

return parseInt(numNew, 10); // the 10 specifies base 10 (decimal)

请注意,即使在 Javascript 版本中,您返回的也是字符串而不是数字,如果调用您的函数的代码需要一个数字并对结果进行比较或以其他方式将其视为整数,这将是一个问题,因此上述解决方案应适用于这两种情况。

【讨论】:

    猜你喜欢
    • 2022-09-22
    • 2022-01-26
    • 2022-12-02
    • 2023-02-25
    • 2022-11-20
    • 1970-01-01
    • 2022-12-07
    • 2022-12-27
    • 2022-12-27
    相关资源
    最近更新 更多