做者 | Saurabh Barot
译者 | 王强
编辑 | Yonie
2018 年发起的 Stack Overflow 开发人员调查(https://insights.stackoverflow.com/survey/2018/) 揭示了业内关于不一样编程语言、平台、库等的一些流行观点。基于这项研究能够看出,TypeScript 是比 JavaScript 更受喜好的编程语言。开发者喜欢使用 TypeScript 的因素之一是它能够向 JavaScript 添加类型。
这样你就能在运行代码以前发现错误了。此外 TypeScript 编译器还能为你提供建议,帮助你更好地解决这些错误。
开发者将类型添加到 JavaScript 后还可使用代码编辑器中的一些高级功能,如自动模块导入、代码自动补完和重构整个项目等。
TypeScript 只是一个基于 JavaScript 的层。TypeScript 的学习曲线很陡峭,使用它以前应该先好好学习它的语法,这样上手起来更快。
开发者能够轻松地将 JavaScript 文件转换为 TypeScript,只需将文件扩展名从.js 更改成.ts 便可。以后全部 TypeScript 代码都将编译为 JavaScript。前端
实际上 TypeScript 是一种编程语言。它也被称为 JavaScript 的超集。你能够在 TypeScript 中找到 JavaScript 中的全部功能。它能够用做大型 JavaScript 应用程序的编程语言。
好消息是最新版本的 ECMAScript 就能支持 TypeScript 了。编译 TypeScript 时还能同时输出一个 JavaScript 版本,在全部平台上都能正常运行。node
若是咱们看一下 TypeScript 从 2016 年到 2018 年 的发展历程,你会发现用过 TypeScript 并愿意再次使用的用户比例从 20.8%增长到了 46.7%。开发人员选择它的主要缘由之一是它能减小错误。typescript
TypeScript 面世已经有几年时间了,相继发布了不少新版本,有了许多改进。这些改进体如今功能、函数、性能等许多方面。使用 TypeScript 取代 JavaScript 的现象也愈来愈多。要深刻了解这一情况,你须要对这些技术有客观的认识。
那么让咱们比较一下......
JavaScript编程
未知顶级类型
“unknown类型”在 TypeScript 3.0 中引入,做为与“any”类型对应的新“类型安全”。区分“未知”和“任何”两个概念的关键在于,“未知”比“任何”(“任何”自 2012 年以来就一直是 TypeScript 的组成部分)宽松不少。它与“任何”很是类似,由于你能够为“未知”分配任何值;但这里类型断言是很重要的,没有它什么都作不了。此外,你不能访问或调用 / 构造任何“未知”类型的属性。
数组和元组上的映射类型
涉及到元组上的映射时,TypeScript 没有引入全新概念,而是在 TypeScript 3.1 中加入了有映射的对象类型。这与同数组和元组交互时应该采用的方式彻底一致。这意味着无论你在用什么方式使用已存在的映射类型(如必需或部分),这些方法也能直接拿来处理数组和元组。这样,TypeScript 能够很好地适用于像 Promise.all 这样的函数。
Node.js 包与 tsconfig.json 的继承
使用 TypeScript 3.2 时你能够从 node_modules 解析 tsconfig.json。当你尝试访问 tsconfig.json 中的“extends”字段时,TypeScript 将查看 thenode_modules 包。它将在 node_modules 文件夹中查找 @my-team/tsconfig-base 的包。在进一步使用该包以前,TypeScript 会查找 package.json 中是否存在 tsconfig 字段,而且一旦找到它就会从字段中加载配置文件。若是找不到这样的字段,那么它将转向 tsconfig.json。在处理大型项目时,这一步骤被证实是颇有用的。
Const 断言
TypeScript 3.4 引入了一个新的字面值构造,它被称为 const 断言。它的语法是一个类型断言,用 const 断言构造新的文字表达式时,你能够表示对象字面量带有只读属性,或者数组具备只读元组。
对 globalThis 进行类型检查
在全局范围内访问值一直是 TypeScript 的一个问题,这个问题在 TypeScript 3.4 中获得了解决,由于新版为 ECMAScript 中的 globalThis 提供了类型检查支持。globalThis 只是一个适用于全局范围的全局变量。此变量可以让你从喜欢的任何环境中轻松访问全局范围。一样,你须要知道 globalThis 不显示两个全局变量,即 const 和 let。
在 JSX 中支持 defaultProps
TypeScript 3.0 为 JSX 中的 React 开发提供了一种新类型,称为 LibraryManagedAttributes。此类型用做帮助程序,用于在 prop 类型组件使用以前定义它的更改。这样就能够对推断和提供的映射与 prop 进行修改。
须要注意的是若是添加了显式类型注释,编译器将没法识别默认属性,由于默认属性是从 defaultProps 的属性类型推断出来的。json
它是一种面向对象的语言
这种面向对象的语言具备接口、类、继承、模块等功能。
可选静态类型
TypeScript 附带可选的静态类型系统,是它的一大优点。你能够向属性、函数、变量等添加类型。所以在应用程序运行以前,编译器就能显示有关任何潜在问题(若是存在)的任何警告。类型能让开发人员知道本身须要哪一种类型 API,在使用框架和库时这一点颇有用。
须要记住的是使用类型是可选的。就是说开发人员不会被 TypeScript 强迫使用他们不想要的任何类型。但要记住,当应用程序规模变大,且随时间变得越发复杂时,类型也会愈来愈体现其价值。
提供对 JavaScript 库的支持
你能够将 TypeScript 与现有的顶级 JavaScript 框架和库以及其余工具一块儿使用。
TypeScript 是可移植的
你能够在任何设备、浏览器或操做系统上运行 TypeScript。它能够在各类设备上轻松使用,全平台兼容。你能够在支持 JavaScript 的任何环境中运行 TypeScript。
更少的错误
在前端开发领域,若是开发者能更方便地发现编程过程当中发生的错误就能节约不少时间。这也就是为何你须要 TypeScript。使用 TypeScript 时,你能够确保代码库中没有无效代码。
智能感知
在你的项目中使用 TypeScript 的另外一个好处是智能感知,由于它能帮助代码自动补完。写代码时智能感知能提供有用的提示。当今市面上全部重要的 IDE 都支持代码自动补完功能,包括 Sublime Text、Atom、WebStorm、VScode,还包括一些命令行编辑器。
TypeScript 很像 JS
TypeScript 代码彻底在 JavaScript 中运行。这意味着你只须要对 JavaScript 有所了解便可开始使用 TypeScript。在代码执行方面,用 TypeScript 编写的代码被编译并转换为 JavaScript。数组
开发者在已经意识到 TypeScript 能够大幅提升生产力,并轻松构建可靠且可扩展的应用程序。将它集成到现有的 JavaScript 是很是容易的,而且它能够轻松地与 React、Angular、Node 和 Vue 一块儿使用。
你还要知道 JavaScript 和 TypeScript 都在不断发展,它们毫不会相互竞争。它们只是相互补充,各自知足不一样的需求。所以,你能够根据你的项目需求选择正确的解决方案。
英文原文: https://aglowiditsolutions.com/blog/why-use-typescript/浏览器