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您可能应该使用[]
来表示数组类型。不过也可能有例外,我不确定。