任何和任何[]有什么区别?

Ram*_*ran 13 arrays types any typescript angular

任何和任何[]有什么区别?


示例1(按预期工作)

name1: any;
name2: any[];
this.name1 = this.name2;
Run Code Online (Sandbox Code Playgroud)

示例2(这也按预期工作)

name1: any;
name2: any[];
this.name2 = this.name1;
Run Code Online (Sandbox Code Playgroud)

为什么打字机允许any数据类型可以访问any[]数据类型.与any[]数据类型一样可以访问数据类型any吗?和哪一个是最好用?并且如果数据类型仅仅是一个物体(未阵列)等string or number or object or any,那么为什么any[ ]将接受该对象类型,而不显示任何运行时或编译时错误?.


cra*_*str 10

如果我们看一下这个TypeScript代码:

let name1: any = "John";
let name2: any[] = ["Mary", "Sue", "Sally"];
name1 = name2;

let name3: any[] = ["Luke", "Paul", "Ringo"];
let name4: any = "Mark";
name3 = name4;
Run Code Online (Sandbox Code Playgroud)

它编译的Javascript是:

var name1 = "John";
var name2 = ["Mary", "Sue", "Sally"];
name1 = name2;
var name3 = ["Luke", "Paul", "Ringo"];
var name4 = "Mark";
name3 = name4;
Run Code Online (Sandbox Code Playgroud)

JavaScript变量是动态的,没有集合类型.我可以想象,这可以被TypeScript编译器报告为警告或错误,但这不会停止生成JavaScript或阻止JavaScript运行.

因此,虽然没有当前的编译错误或警告any/ any[]赋值,any[]但仍可用于通知开发人员期望.

注意:这不是我写过的代码或建议任何人都会使用的代码.这只是带有值的OPs代码,并显示了由此产生的JavaScript,因为它编译为JavaScript,因为类型因为变量具有动态类型而不会出现运行时错误.这是我们选择使用TypeScript的原因之一:编译时静态类型检查.出于这个原因,人们通常会避免anyany[]支持更好地代表数据的类或接口.在这种情况下,stringvs. string[](或任何其他类型)显示编译器错误.

在这个例子中,两个name1 = name2name3 = name4都是编译时错误,因为变量从赋值中推断出类型,并且在后续代码中对它们的使用进行了类型检查.

let name1 = "John";
let name2 = ["Mary", "Sue", "Sally"];
name1 = name2; //Type 'string[]' is not assignable to type 'string'.

let name3 = ["Luke", "Paul", "Ringo"];
let name4 = "Mark";
name3 = name4; //Type 'string' is not assignable to type 'string[]'.
Run Code Online (Sandbox Code Playgroud)


Pic*_*cci 6

如果您any在作业的左侧和右侧使用,则基本上是对Typescript说不使用类型检查.

any左侧,它表示您要分配的变量值可以接受任何类型,因此它接受包括类型对象在内的任何内容any[].

如果类型any在右侧并且您myVar: any[]在左侧,则基本上对Typescript说不使用类型检查.考虑到在运行时不应用类型检查,最终myVar会在任务的右侧填充您可能拥有的任何内容.

  • @RameshRajendran因为它编译成Javascript,你会怎么期望运行时错误(变量没有静态类型)? (4认同)