记一次错误的尝试一门新语言TypeScript

作为一个不被编程语言束缚的程序员,跨语言开发是常事。不怕开始学习一门新语言,怕的是开始了一门语言后,越来越发现对项目不合适。最近的一个项目,选择TypeScript就是一个错误的选择。

该项目是一个管理后台系统的前端,功能主要是对业务数据的CRUD等,没有复杂的业务逻辑。因为TypeScript种草好久了,所以在项目开始的时候拍脑袋决定尝试TypeScript。

开始在网上翻了一些TypeScript入门和JavaScript转TypeScript的教程,研究了半天就直接开始上手了。基础框架选择的基于vue的vuetify,github上找了一套现成的模版,测试环境很快就跑起来了。运行没问题,只是vscode里一堆报错,文件差不多全是红的。简单看了下,基本都是跟数据类型有关的,但不影响运行和打包,为了赶进度就没在意。

JavaScript转TypeScript容易犯的错

后来闲下来决定把这些报错排除掉,梳理下来,基本都是变量类型没有定义引起的报错,概括为这两类:

  • Property 'id' does not exist on type 'never'.ts(2339)
  • Type 'string' is not assignable to type 'never'.ts(2322)

第一类是因为读取了never类型变量的属性;第二类是因为给never类型变量赋具体的值。never类型是TypeScript中的底层类型,因为我没有定义变量类型,TypeScript会对变量类型进行推断,最终推断为never类型。never类型字面上理解是“永远不可能”的类型,使用的时候只能赋never类型的值,所以不能给他赋stringnumber等具体类型的值,也不能读他的某个特定属性。
最后我把所有报错涉及到的变量,全都定义为了any类型,红色报错终于都消失了。
其实这么一改,把TypeScript的最重要的特性强类型特性阉割了,相当于一下改回了JavaScript。该项目里只用到了TypeScript的interface特性,对后台api的传参做了约束,别的特性都没用到。

下面回头复习下TypeScript相较JavaScript的那些特性。

TypeScript的特性

TypeScript是一个JavaScript的超集,具有JavaScript所有特性,还具有额外的静态类型,允许定义变量和参数的类型,以提供更严格的类型检查和更好的代码提示。

TypeScript具有以下特性:

  • 静态类型检查:TypeScript支持静态类型检查,能够在编译阶段发现潜在的类型错误。
  • 类和接口:TypeScript支持面向对象编程,包括类、接口、继承和多态等特性。
  • 泛型:TypeScript支持泛型,可以在编写类和函数时提供更灵活的类型支持。
  • 模块化:TypeScript支持模块化开发,可以使用import和export关键字来进行模块的导入和导出。
  • ES6支持:TypeScript对ES6的新特性有很好的支持,包括箭头函数、模板字符串、解构赋值等。
  • 可选参数和默认参数:TypeScript支持函数参数的可选和默认值。
  • 类型推断:TypeScript能够根据上下文推断变量的类型,减少了冗余的类型声明。

建议

TypeScript确实强大,但不是谁都适合。TypeScript适合做大型、长期的项目,对开发人员素质有一定要求,有利于项目的稳定性和长期维护。如果只是做实验项目或短期项目,建议还是用JavaScript。