Typescript基元类型:类型之间的任何差异;“数字”;及;“数字”;(TSC是否不区分大小写)?

Typescript基元类型:类型之间的任何差异;“数字”;及;“数字”;(TSC是否不区分大小写)?,typescript,tsc,Typescript,Tsc,我本想写一个number类型的参数,但我拼错了类型,改为写number 在我的IDE(JetBrains WebStorm)上,类型编号使用与基本类型编号相同的颜色编写,而如果我编写一个类的名称(已知或未知),它会使用不同的颜色,因此我猜它会以某种方式将拼写错误的类型识别为正确/几乎正确/某种正确的类型 当我编译代码时,TSC没有抱怨编译器找不到名为Number的类,而是编写以下错误消息: Illegal property access 这是否意味着number和number都以不同的类型共存

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

在我的IDE(JetBrains WebStorm)上,类型<代码>编号使用与基本类型<代码>编号相同的颜色编写,而如果我编写一个类的名称(已知或未知),它会使用不同的颜色,因此我猜它会以某种方式将拼写错误的类型识别为正确/几乎正确/某种正确的类型

当我编译代码时,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]; 
    }
}

JavaScript有基本类型(数字、字符串等)和对象类型(数字、字符串等,它们在运行时是显式的)的概念。类型脚本类型
number
number
分别引用它们。JavaScript通常会将对象类型强制为其原语等价物,反之亦然:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
TypeScript类型系统规则处理此问题(规范第3.7节)的方式如下:

用于确定子类型、超类型和赋值 兼容性关系、数字、布尔值和字符串原语 类型被视为具有与对象相同属性的对象类型 分别为'Number'、'Boolean'和'String'接口


JavaScript有基本类型(数字、字符串等)和对象类型(数字、字符串等,它们在运行时是显式的)的概念。类型脚本类型
number
number
分别引用它们。JavaScript通常会将对象类型强制为其原语等价物,反之亦然:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
TypeScript类型系统规则处理此问题(规范第3.7节)的方式如下:

用于确定子类型、超类型和赋值 兼容性关系、数字、布尔值和字符串原语 类型被视为具有与对象相同属性的对象类型 分别为'Number'、'Boolean'和'String'接口


通过以下方面的指导补充Ryan的答案:

永远不要使用类型
Number
String
Boolean
Symbol
Object
这些类型指的是 几乎从未在JavaScript代码中正确使用过

/* WRONG */
function reverse(s: String): String;
请务必使用类型
number
string
boolean
symbol

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

通过以下方面的指导补充Ryan的答案:

永远不要使用类型
Number
String
Boolean
Symbol
Object
这些类型指的是 几乎从未在JavaScript代码中正确使用过

/* WRONG */
function reverse(s: String): String;
请务必使用类型
number
string
boolean
symbol

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

正如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');
}

正如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');
}

有人可能会补充说它们不完全是可交叉分配的:也可以回答原始海报:是的,TSC(如javascript)区分大小写:)有人可能会补充说它们不完全是可交叉分配的:也可以回答原始海报:是的,TSC(如javascript)区分大小写:)@atilkan这很有趣。我猜他们并没有采纳他们自己的建议。那个文档是在小写字母
对象
出现之前编写的thing@RyanCavanaugh我想我们应该报告这一点。@ShaunLuttin关于数组,我找不到任何小写的例子。@atilkan您可能应该使用
[]
来表示数组类型。不过也可能有例外,我不确定。@atilkan这很有趣。我猜他们并没有采纳他们自己的建议。那个文档是在小写字母
对象
出现之前编写的thing@RyanCavanaugh我想我们应该报告这一点。@ShaunLuttin关于数组,我找不到任何小写的例子。@atilkan您可能应该使用
[]
来表示数组类型。不过也可能有例外,我不确定。