这两天同时写 3 个项目,脑子有点乱,每天白天写一个晚上另外写一个,第二天可能就是第三个项目,所以每天上午到公司之后有大概 1 个多小时就处于梦游的状态,就等着群里有谁提问题,然后我解决的时候可以把脑回路给转换过来,但是这段时间可能因为疫情的原因吧,活跃的人越来越少了,还是自己写写 demo 把今年要学的 TS 给学起来吧。
本来是想等到 Vue 更新 3.0 的时候再学的,但是感觉可能等到 3.0 出来了应该要是下半年了,如果上半年就只学习 React,不配合 TS 的就有点太浪费了,好多小伙伴就是用 TS 在开发 React 项目。
此文是一篇引子,大概讲述一下为什么要学习 TypeScript、TypeScript 的优点等,可能要等到我全部学习完成之后才能把整篇文章整理写完,可能进度会很慢,因为要同时学习 ReactJS。
现在我的对 TS 的了解知之甚少,只知道 TS 是一种强类型的脚本语言, 可以让编写的代码避免一些基础的 Bug,来提高自己的开发效率,并且可以增强项目的可维护性。
❓ 现存的一些疑问 [update:2024-08-28]
💬 为什么要学 TS
首先就是类型安全,有了类型检查之后我们在开发过程中会自动捕获错误并即使提示,减少运行时错误和绝大多数的低级、白痴问题。
- 比如说经典的
Uncaught TypeError: xxx is undefined
和Uncaught TypeError: xxx is not a function
两个异常抛出。
更好的开发体验,有了类型声明之后现代IDE可以提供良好的类型推导和代码提示、补全功能。在长期维护的项目中也可以提高项目代码的可读性和可维护性。团队协作时即使没有文档,相互之间也可以通过IDE的类型提示,了解各个变量的数据结构、函数入参和返回值。减少大量阅读相关代码理解代码逻辑的成本。
在后期可能的业务重构中也会提高安全性。静态类型检查器可以捕获一些潜在的逻辑错误,确保所有变量、函数参数和返回值的类型保持一致。如果改变了某个函数,类型检查器会在编译时捕获所有受影响的业务。
另外,如果是开源项目使用TS也会增加使用者的开发体验。可以说在开源项目中使用TS是一种负责任的体现。即使不使用TS开发,最好也需要提供类型声明文件(.d.ts
文件)
💬 为什么能避免低级 BUG
因为第一个问题提到的 静态类型检查 可以发现潜在的逻辑错误。在开发过程中会需要我们提供变量、函数的明确类型信息。那么如果在声明的类型中并没有对应的属性和方法。那么自然无法通过类型检查器在控制台抛出异常。
💬 TS 有什么好的,为什么 React,Vue,Ng 都开始使用 TS
使用TS的好处已经第一个问题中回答了。在 React
和 Vue
中使用TS是可选的,而在 Angular
中是强制开启的。
💬 三大框架哪一个更适合 TS
如上一个问题的回答,Angular
是强制使用TS开发的,所以天生就对于TS有非常好的支持。React
也是对TS有良好的支持,TS 也有提供 .tsx
这样的文件后缀类型,来支持在 TS 中书写 JSX
语法。
而 Vue
则需要区分 Vue2
和 Vue3
。在 Vue3
中因为使用了 TS
重构了项目,所以现在也如同 React
一样有良好的 TS 支持。但是在 Vue2
中对于 TS 的支持并不友好,如果要选择使用 TS 并不建议你使用 Vue2
(虽然可以使用,但是开发体验并不友好)。
💬 TS 除了类型约束还和 JS 有什么区别
可能在更早期的JS版本中,TS会提供比JS更多的新特性。但是现在其实JS已经吸收并实现了了很多TS中的新特性。我个人是觉得在实际工作中的业务开发上面,除了类型声明和在此之后提供的衍生功能之外(类型检查、推导功能),并没有更多的优势了。
其它的一些杂物
- TS -> JS 的超集
- 一门静态语言
- 现阶段可能搭配 React 学习更好,搭配 Vue 2.x 可能有点尴尬
参考
现在还是一篇草稿要整理过,暂时先把一些想法写下来,等学习全部完成了再重新编辑发布,期间应该会有很多版的调整,最终版应该会面目全非