arrays - any 和 any[ ] 有什么区别?

标签 arrays angular typescript types any

any 和 any[ ] 有什么区别?


示例 1(按预期工作)

name1: any;
name2: any[];
this.name1 = this.name2;

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

name1: any;
name2: any[];
this.name2 = this.name1;

Why typescript allowing any data type can be access any[] data type. As same as any[] data type can be access any type of data? and Which one is best to use? And If the data type is just an object (not an array) like string or number or object or any, then why any[ ] will be accept that object type without showing any run-time or compile-time error?.


最佳答案

如果我们看一下这段 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;

它编译成的 Javascript 是:

var name1 = "John";
var name2 = ["Mary", "Sue", "Sally"];
name1 = name2;
var name3 = ["Luke", "Paul", "Ringo"];
var name4 = "Mark";
name3 = name4;

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

因此,虽然当前没有针对 any/any[] 赋值的编译错误或警告,但 any[] 仍可用于将期望告知开发者。

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

在此示例中,name1 = name2name3 = name4 都是编译时错误,因为变量从赋值中推断出类型并且它们的用法是类型- checkin 后续代码。

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[]'.

关于arrays - any 和 any[ ] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44069326/

相关文章:

c++ - 将数组传递给函数

java - 创建数组列表

javascript - 如何使用 ngModel Angular 在输入文本中使用管道

javascript - 如何在 NestJS 中编写嵌套 DTO

javascript - 在 TypeScript 中声明 JavaScript 扩展函数

php - 更新而不是用ajax替换wordpress自定义字段

c - 如何将函数输出(数组)分配给c中的另一个函数?

Angular 2 用户界面路由器 : change data in parent state

javascript - 为什么 ViewChild 不能与 angular8+ 中的 attr.id 一起使用?

angularjs - 禁用 Twitter Typeahead 上的 Enter 键?