前言
本系列旨在成为“TypeScript 语言精华”指南。我们会假定读者已经充分掌握了 JavaScript 编程技能,并将 TypeScript 定义为 JavaScript 的静态类型检查器。
JavaScript 本身是一个动态类型的语言。也就是说,JavaScript 运行时会在需要的时候自动为值进行类型转换。举例来说:
let width = 42, depth = "42";
console.log(width == depth); // true
从静态类型的角度出发,这里的运行结果会让人感到错愕。两个类型完全不同的值怎么可以相等,这和“挂羊头卖狗肉”有什么区别。
然而,事实是 JavaScript 引擎在执行 42 == "42"
相等比较时,会先调用 Number()
方法将 "42"
转换为数字类型,然后进行值的比较。
下面将数字字符串换成它的二进制形式,希望有助于向你表明 JavaScript 的动态类型转换自有它的一套规则。如果你不了解这套规则,就会觉得 JavaScript 的类型无所谓。
let width = 42;
let depth = "0B101010";
console.log(width == depth); // true
这里引擎对 "0B101010"
调用 Number()
的结果就是数字 42
,所以这里的 width
和 depth
依然是相等。
然而,一些人认为这种隐式地类型转换不够安全。特别是当开发大型项目时,没有了类型的强制约束,非常容易传入错误类型的值而引发奇奇怪怪的问题。
TypeScript 就是为此而生,它会在代码执行之前基于值的类型检查程序是否有错误。这就是它的编译过程。
TypeScript 最终编译输出的结果是最后使用的 JavaScript 文件,期间的类型信息会被编译器擦除掉。
本系列文章严肃参考了下面链接的文档资料,不是简单的文字搬运,希望可以帮到 JavaScript 编程从业者。