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 accessany[]
data type. As same asany[]
data type can be accessany
type of data? and Which one is best to use? And If the data type is just an object (not an array) likestring or number or object or any
, then whyany[ ]
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 的原因之一:编译时静态类型检查。出于这个原因,人们通常会避免使用 any
和 any[]
来支持更好地表示数据的类或接口(interface)。在这种情况下,string
与 string[]
(或任何其他类型)将显示编译器错误。
在此示例中,name1 = name2
和 name3 = 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/