📌  相关文章
📜  'Number' 类型的gument 不能分配给'string | 类型的参数数字'.类型“数字”不可分配给类型“数字”. 'number' 是一个原语,但 'Number' 是一个包装对象.尽可能使用“数字”. (1)

📅  最后修改于: 2023-12-03 14:58:58.501000             🧑  作者: Mango

错误介绍

当我们把一个类型为Number的参数传递给一个接受string | number类型参数的函数时,可能会出现以下错误:

const foo = (bar: string | number) => {
   // do something
}

const num: Number = 42;

foo(num); // Error: Argument of type 'Number' is not assignable to parameter of type 'string | number'.

错误提示如下:

Argument of type 'Number' is not assignable to parameter of type 'string | number'.
Type 'Number' is not assignable to type 'number'.
'number' is a primitive, but 'Number' is a wrapper object. Prefer using 'number' when possible.
错误原因

出现这个错误的原因是Number是一个包装对象,而number是一个原语类型。因此,当我们尝试将Number类型的参数传递给一个期望接收number类型参数的函数时,TypeScript会抛出以上错误。

解决方法

最好的方法是避免使用Number类型,而尽可能使用number类型。如果无法避免使用Number,则可以使用以下方法进行类型转换:

const foo = (bar: string | number) => {
   // do something
}

const num: Number = 42;

foo(num.valueOf()); // 使用valueOf()方法进行类型转换

这样就可以避免以上的错误,代码也能正常运行了。

总结

虽然Number类型在某些情况下很方便,但是在TypeScript中,我们应该尽可能使用number类型。避免使用Number类型可以避免一些常见的类型错误,也更符合TypeScript的语言规范。