我本打算编写一个number
类型的参数,但我拼写错了类型,改为编写了Number
。
在我的集成开发环境(JetBrains WebStorm)中,类型Number
使用与原始类型number
相同的颜色编写,而如果我编写一个类名(已知的或未知的),它使用不同的颜色,所以我猜它以某种方式将拼写错误的类型识别为正确/几乎正确/排序正确的类型。
当我编译代码时,TSC不会抱怨编译器找不到名为Number
的类,而是写下以下错误消息:
Illegal property access
这是否意味着number
和Number
都作为不同的类型共存?
如果这是真的,那么这些类之间的区别是什么?
如果不是这样,那么为什么它没有编写与未知类相同的错误消息(“名称'Number‘在当前作用域中不存在”)
代码如下:
class Test
{
private myArray:string[] = ["Jack", "Jill", "John", "Joe", "Jeff"];
// THIS WORKS
public getValue(index:number):string
{
return this.myArray[index];
}
// THIS DOESN'T WORK: ILLEGAL PROPERTY ACCESS
public getAnotherValue(index:Number):string
{
return this.myArray[index];
}
}
发布于 2013-03-19 06:28:28
JavaScript具有原语类型(数字、字符串等)和对象类型(数字、字符串等,它们在运行时显示)的概念。TypeScript类型number
和Number
分别表示它们。JavaScript通常会将对象类型强制转换为其原始等效项,反之亦然:
var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
TypeScript类型系统规则对此进行如下处理(规范3.7节):
为了确定子类型、超类型和赋值兼容性关系,Number、Boolean和String基元类型分别被视为具有与‘Number’、‘Boolean’和‘String’接口相同属性的对象类型。
发布于 2017-03-08 01:26:59
为了用TypeScript Do's and Don'ts的指导来增强瑞安的回答
永远不要使用类型
Number
、String
、Boolean
、Symbol
或Object
这些类型引用的是非原语的盒装对象,这些对象在JavaScript代码中几乎从未正确使用过。
/*错误*/函数反转(s: String):String;
请使用number
、string
、boolean
和symbol
类型。
/* OK */ function reverse(s: string):string;
发布于 2020-03-11 04:46:11
正如TypeScript文档所说:
var Number: NumberConstructor
(value?: any) => number
表示任意类型的数字的对象。所有JavaScript数都是64位浮点数。
正如它所说的,将any
作为参数并返回number或null
它提供了一种简单方法来检查一个值是否为数字
Number("1234"); // 1234
Number("1234.54") // 1234.54
Number("-1234.54") // -1234.54
Number("1234.54.33") // null
Number("any-non-numeric") // null
所以我们可以简单地使用来检查数字,如下所示:
if(Number(val)){
console.log('val is a number');
} else {
console.log('Not a number');
}
https://stackoverflow.com/questions/15487220
复制相似问题