我的意思是写一个类型的参数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代码中几乎从不使用的非原始盒装对象.
Run Code Online (Sandbox Code Playgroud)/* WRONG */ function reverse(s: String): String;请使用类型数字,字符串和布尔值.
Run Code Online (Sandbox Code Playgroud)/* OK */ function reverse(s: string): string;
Rya*_*ugh 43
JavaScript具有原始类型(数字,字符串等)和对象类型(数字,字符串等,在运行时显示)的概念.TypeScript类型number并Number分别引用它们.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"接口相同属性的对象类型.
| 归档时间: |
|
| 查看次数: |
23527 次 |
| 最近记录: |