TypeScript解决了JavaScript的什么问题?

你有没有遇到这样一个场景,你访问了变量的属性,但是这个变量是一个undefined,如果你没有在这个地方都提前做好错误兜底,那么此时页面就会报错导致出现白屏。

如果你的应用已经上线了,因为你的这个错误导致用户不能使用,那么等待你的就是老板和产品一顿狠批。这时,你是否会觉得JavaScript没有你想得那么完美。

JavaScript是伟大的,也是自由的,正因为它的自由,你会用起来特别爽。但,这种自由是有代价的,最主要的是它缺少类型这个能力,导致你无法直接查看一个变量在经历一通操作后变成了什么类型,导致你在开发较复杂应用时的效率没那么高。同时,由于缺少类型保障,可能导致你的代码中出现调用 undefined 值和访问 undefined 值的属性这种问题。很多同学觉得这个问题好像也不大啊,仔细一点就可以了,这只能说明你太年轻了,你如果开发过一个大型复杂应用就知道这个问题是多么的严重了。

TypeScript是什么?

TypeScript 听名字它就是一门全新的语言?但是我怎么听说它还有编译能力?好像还需要配置?写 JavaScript 的时候我可从来没听过配置 JavaScript 这回事,所以它到底是个啥?

首先,TypeScript 就是一门编程语言------和 JavaScript 是并列的

但是在编程语言领域,有很多"一门编程语言基于另一门编程语言"的例子,比如基于 C 语言的 Python 与 Lua,基于 Java 的 Kotlin 与 Scala 等等,这些语言的诞生大部分是为了获得底层的高性能与使用"更好"的语法与功能。

TypeScript 也是如此,它是基于 JavaScript 开发的,在 JavaScript 的基础之上添加了类型,而这也是我们前面提到的,JavaScript 最为人诟病的问题之一。

所以,有人说TypeScriptJavaScript的超集。

TypeScript: 提供类型保障

现在我们知道, JavaScript 最大的不足之处是无法提供类型保障。比如没有类型,想知道这个变量是什么值只能靠你一个个 console.log 查看。直到某一天,由于没有类型提示和缺少足够细致的检查,你的代码中有一处尝试对一个 undefined 值进行调用,这个严重的错误导致出现了线上白屏。

这时,TypeScript 出现了,它能够解决这个问题,而且还是原汁原味的 JavaScript 语法和 API,只需要新学习类型这个东西,就能够弥补 JavaScript 的最大遗憾之一,所以,前端同学学起来轻松不少。

TypeScript: 编译器

浏览器只能执行JavaScript

由于前端环境的特殊性,浏览器是只能执行 JS 文件的,TS 一方面相比 JS 诞生要晚得多,另一方面也有它是由微软,而非公共技术组织维护的原因。因此,如果 TypeScript 仅仅只做了添加类型这件事情,那么其实是完全没意义的,辛辛苦苦写完,发现浏览器完全不认,那就很头疼了。

因此,TypeScript 还需要能够被转换为 JavaScript 才能为开发者所接受,类似的,上面的这些一门基于另一门的编程语言,也大多都拥有这种编译为自己基于的语言的能力。而在从 TypeScript 编译到 JavaScript 的过程中,TypeScript 团队提供了 tsc 这个编译工具(它是在安装 TypeScript 的同时就会一起被安装的),它能将 TS 中的类型擦除,而擦除了类型之后,剩下的就是原汁原味的 JS 代码了。

高阶语法的使用

随着 TypeScript 的演进,开发团队意识到了一个问题,JS 的迭代效率实在是太慢了!一个新的语法就算大家都一致认为非常有必要,都眼巴巴盼着使用,也需要经过数次公开会议,然后等着浏览器支持...。

如果你想提前用,就需要引入 Babel,包括找到插件,配置插件,然后给原来开箱即用的代码加一道编译工序...。

这个时候 TypeScript 团队一想,反正我编译到 JS 的时候都要做一次编译工作了,那还不如说我提前让你能使用这些 JS 还没完全支持的语法,然后编译的时候跟 Babel 一样,我顺便把这些语法编译到低版本浏览器也能运行的语法不就行了?

而绝大部分的编译工具,都是需要配置的,包括降级到哪个 ES 版本,使用哪种模块(CommonJs、ES Module、UMD、IIFE ...)等等。所以 TypeScript 也引入了自己的配置文件 tsconfig.json,用于进行编译等等能力的配置。

正是因为这些背景因素,使得我们今天学习的 TypeScript 颇有些"四不像"的味道,说你是编程语言,你还有那么多配置,说你是编译工具,你怎么还能直接当一个全新的大有可为的编程语言来写

总结

通过上面的了解,你已经知道TypeScript是什么了,它就是:TypeScript = JavaScript + 类型 + Babel

在学习TypeScript之前能理解到这么一点对后面的学习是非常重要的,它能帮助你时刻理解TypeScript是干什么用的。

相关推荐
王解17 小时前
Jest项目实战(2): 项目开发与测试
前端·javascript·react.js·arcgis·typescript·单元测试
鸿蒙开天组●20 小时前
鸿蒙进阶篇-网格布局 Grid/GridItem(二)
前端·华为·typescript·harmonyos·grid·mate70
zhizhiqiuya21 小时前
第二章 TypeScript 函数详解
前端·javascript·typescript
初遇你时动了情1 天前
react 18 react-router-dom V6 路由传参的几种方式
react.js·typescript·react-router
王解1 天前
Jest进阶知识:深入测试 React Hooks-确保自定义逻辑的可靠性
前端·javascript·react.js·typescript·单元测试·前端框架
_jiang2 天前
nestjs 入门实战最强篇
redis·typescript·nestjs
清清ww2 天前
【TS】九天学会TS语法---计划篇
前端·typescript
努力变厉害的小超超3 天前
TypeScript中的类型注解、Interface接口、泛型
javascript·typescript
王解3 天前
Jest进阶知识:整合 TypeScript - 提升单元测试的类型安全与可靠性
前端·javascript·typescript·单元测试
Vesper633 天前
【TS】TypeScript 类型定义之联合类型(union types)和交叉类型(intersection types)
linux·ubuntu·typescript