「 TypeScript 笔记 」 楔子

最后更新:

这两天同时写 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 undefinedUncaught TypeError: xxx is not a function 两个异常抛出。

更好的开发体验,有了类型声明之后现代IDE可以提供良好的类型推导代码提示、补全功能。在长期维护的项目中也可以提高项目代码的可读性和可维护性。团队协作时即使没有文档,相互之间也可以通过IDE的类型提示,了解各个变量的数据结构、函数入参和返回值。减少大量阅读相关代码理解代码逻辑的成本。

在后期可能的业务重构中也会提高安全性。静态类型检查器可以捕获一些潜在的逻辑错误,确保所有变量、函数参数和返回值的类型保持一致。如果改变了某个函数,类型检查器会在编译时捕获所有受影响的业务。

另外,如果是开源项目使用TS也会增加使用者的开发体验。可以说在开源项目中使用TS是一种负责任的体现。即使不使用TS开发,最好也需要提供类型声明文件(.d.ts 文件)

💬 为什么能避免低级 BUG

因为第一个问题提到的 静态类型检查 可以发现潜在的逻辑错误。在开发过程中会需要我们提供变量、函数的明确类型信息。那么如果在声明的类型中并没有对应的属性和方法。那么自然无法通过类型检查器在控制台抛出异常。

💬 TS 有什么好的,为什么 React,Vue,Ng 都开始使用 TS

使用TS的好处已经第一个问题中回答了。在 ReactVue 中使用TS是可选的,而在 Angular 中是强制开启的。

💬 三大框架哪一个更适合 TS

如上一个问题的回答,Angular 是强制使用TS开发的,所以天生就对于TS有非常好的支持。
React 也是对TS有良好的支持,TS 也有提供 .tsx 这样的文件后缀类型,来支持在 TS 中书写 JSX 语法。

Vue 则需要区分 Vue2Vue3。在 Vue3 中因为使用了 TS 重构了项目,所以现在也如同 React 一样有良好的 TS 支持。但是在 Vue2 中对于 TS 的支持并不友好,如果要选择使用 TS 并不建议你使用 Vue2(虽然可以使用,但是开发体验并不友好)。

💬 TS 除了类型约束还和 JS 有什么区别

可能在更早期的JS版本中,TS会提供比JS更多的新特性。但是现在其实JS已经吸收并实现了了很多TS中的新特性。我个人是觉得在实际工作中的业务开发上面,除了类型声明和在此之后提供的衍生功能之外(类型检查、推导功能),并没有更多的优势了。


其它的一些杂物

  • TS -> JS 的超集
  • 一门静态语言
  • 现阶段可能搭配 React 学习更好,搭配 Vue 2.x 可能有点尴尬

参考


现在还是一篇草稿要整理过,暂时先把一些想法写下来,等学习全部完成了再重新编辑发布,期间应该会有很多版的调整,最终版应该会面目全非