如果我们看一下这个 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 变量是动态的并且没有固定的类型。我可以想象这could被 TypeScript 编译器报告为警告或错误,但这不会停止 JavaScript 的生成或阻止 JavaScript 运行。
因此,虽然当前没有编译错误或警告any
/any[]
作业,any[]
仍然可以用来告知开发人员期望。
Note:这不是我会编写或建议任何人使用的代码。这只是带有值的 OP 代码,并显示了生成的 JavaScript 是什么,并且由于它编译为 JavaScript,因此不会因类型而出现运行时错误,因为变量具有动态类型。这就是我们选择使用 TypeScript 的原因之一:编译时静态类型检查。出于这个原因,人们通常会避免any
and any[]
支持更好地表示数据的类或接口。在这种情况下,string
vs. string[]
(或任何其他类型)will显示编译器错误。
在这个例子中,两个name1 = name2
and name3 = 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[]'.