类型脚本基本类型: 类型“数字”和“数字”之间有什么区别(TSC 不区分大小写) ?

我本来想写一个类型为 number的参数,但是我拼错了类型,改写为 Number

在我的 IDE (JetBrains WebStorm)中,类型 Number的颜色与原语类型 number的颜色相同,而如果我写一个类的名称(已知或未知) ,它会使用不同的颜色,所以我猜想它会以某种方式将拼写错误的类型识别为正确的/几乎正确的/有点正确的类型。

当我编译代码时,TSC 没有抱怨编译器找不到一个名为 Number的类,而是写下了这个错误消息:

Illegal property access

这是否意味着 numberNumber都以不同的类型共存?

如果这是真的,那么这些类之间的区别是什么?

如果不是这种情况,那么为什么它没有编写对未知类显示的相同错误消息(“名称‘ 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];
}
}
53577 次浏览

JavaScript 具有 原始类型(数字、字符串等)和 对象类型(数字、字符串等)的概念,这些类型在运行时是清单的。TypeScript 类型 numberNumber分别引用它们。JavaScript 通常会将一个对象类型强制转换为它的基本等价物,反之亦然:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35

TypeScript 类型系统规则处理这个问题(规范3.7部分)如下:

用于确定子类型、超类型和赋值 兼容关系、 Number、 Boolean 和 String 基元 类型作为具有与 ‘ Number’、‘ Boolean’和‘ String’接口。

注意事项的指导来补充 Ryan 的回答:

永远不要使用类型 NumberStringBooleanSymbolObject。这些类型指的是非原始的盒装对象 几乎从未在 JavaScript 代码中正确使用过。

/* WRONG */
function reverse(s: String): String;

使用类型 numberstringbooleansymbol

/* OK */
function reverse(s: string): string;

正如 TypeScript 文档所说:

var Number: NumberConstructor
(value?: any) => number

一个对象,表示任意类型的数字。所有的 JavaScript 数字 是64位浮点数。

如它所说,以 any作为参数并返回数字或 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');
}