Typescript原语类型:"number"和"Number"类型之间的任何区别(TSC不区分大小写)?

Ces*_*sco 73 typescript tsc

我的意思是写一个类型的参数number,但我错误拼写了类型,Number而是写作.

在我的IDE(JetBrains WebStorm)上,类型Number使用与原始类型相同的颜色编写number,而如果我写了一个类的名称(已知或未知),它使用不同的颜色,所以我猜它以某种方式识别它拼写错误的类型作为正确/几乎正确/排序正确的类型.

当我编译代码时,而不是抱怨例如编译器找不到名为的类Number,TSC写入此错误消息:

Illegal property access
Run Code Online (Sandbox Code Playgroud)

这是否意味着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]; 
    }
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*tin 88

TypeScript Do和Don'ts的指导下增加Ryan的答案:

不要使用Number,String,Boolean或Object类型.这些类型指的是在JavaScript代码中几乎从不使用的非原始盒装对象.

/* WRONG */
function reverse(s: String): String;
Run Code Online (Sandbox Code Playgroud)

请使用类型数字,字符串和布尔值.

/* OK */
function reverse(s: string): string;
Run Code Online (Sandbox Code Playgroud)

  • @ShaunLuttin数组呢,我找不到任何小写的例子。 (3认同)
  • @atilkan您应该使用`[]`来表示数组类型.可能有例外,我不确定. (3认同)
  • @atilkan很好玩。我想他们没有听取自己的建议。 (2认同)
  • 该文档是在小写“object”出现之前编写的 (2认同)

Rya*_*ugh 43

JavaScript具有原始类型(数字,字符串等)和对象类型(数字,字符串等,在运行时显示)的概念.TypeScript类型numberNumber分别引用它们.JavaScript通常会将对象类型强制转换为其原始等价物,反之亦然:

var x = new Number(34);
> undefined
x
> Number {}
x + 1
> 35
Run Code Online (Sandbox Code Playgroud)

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

为了确定子类型,超类型和赋值兼容性关系,Number,Boolean和String基元类型被视为具有与"Number","Boolean"和"String"接口相同属性的对象类型.

  • 有人可能会补充说,它们并不是完全可交叉分配的:http://www.typescriptlang.org/Playground/#src=var%20x%3Anumber%3B%0Avar%20y%3ANumber%3B%0Ay%20%3D%20x%图3B%20%2F%2F%20okay%20%0Ax%20%3D%20Y%3B%20%2F%2F%20not%20okay%20 (7认同)
  • 还要回答原始海报:是TSC(如javascript)区分大小写:) (3认同)