TypeScript: 若有所思

Created
Mar 19, 2021 11:40 AM
Tags
unfinished
在我初学 JS 的时候,就听闻 TypeScript 的优越性;当时的看法:给 JS 这样的动态类型语言加上类型系统是个得不偿失的过程——增加学习成本不说,更限制了 JS 的自由度
后来,我对 TS 的作用有了新的思考
起因便是我使用原生 JS 写了几个项目。随着项目代码量的增加,Bug 也是越写越多,DeBug 技术我们先不说,打断点倒是信手拈来;过后我总结出来几个突出的问题:
  • 变量难以预测:
    • 变量的类型的不确定性 → 代码逻辑的混乱
      • 就算 VS Code 目前会对 JS 进行类型推断,但一般情况下,它推断的类型都是可有可无的 any 类型
    • 通过 . 访问变量的属性还是方法的不确定性 → 误把属性当作方法,导致报错
      • Uncaught TypeError: someVar.hook is not a function
        使用 TS 后,IDE 就能根据类型判断(以及过滤掉不存在的)相关属性和方法
    • 对于函数来说,到底接受什么参数,又返回何种参数,入参的数量也不确定
      • TS 完美解决此类问题,有时甚至无需特意指定参数类型(我之前使用的 JSDoc 注释就是利用了 VS Code 内置的 TS 服务)
  • 只能在 RUNTIME 查错,需要更多 DeBug
    • DeBug 多了,我发现很多重复的错误点,比如 JS 的真假判断(对所有类型都能计算出真假)常常没有处理到位,导致条件判断出错
  • 如果没有良好的注释和贡献文档 → 不利于开源协同
    • 对于一个开源项目,如果没有好的注释和贡献文档,维护难度很大
      相反,一个 TS 的项目,本身的 Type Guard 就能让贡献者少犯大部分错误,
  • ...
抱着解决这些痛点的心态,我开始上手 TS;我渐渐发现 TS 的能力远不止一个强大的类型系统,还有泛型、类型运算操作、更易控制的面向对象 Class 等等