TypeScript

2月前

JavaScript 中新建对象是非常简单粗暴的,我们可以很随意的定义一个对象:

const person = {
  name: 'Jack',
  age: 12,
  hobbies: ['swim', 'sing', 'cry]
}

除了新建对象很简单,随时增加一个属性,修改属性类型都非常简单:

person.name = true
person.hobbies = {
  likes: undefined
}

即便我们在代码上编写的很清晰,依然无法得知每一处对象隐晦的属性定义以及函数的输入输出类型。TypeScript 可以从某种程度上缓解这种状况,项目结构上会清晰很多。

类型安全与类型推测

如果项目所有模块都是 TypeScript 编写,整个类型推测将会非常好用。如果是 JavaScript 编写的项目,只不过是用了 index.d.ts 来描述了一部分类型,类型推测不过就是个幌子,无法完全约束。TypeScript 对于从 any 推测出来的类型没有做类型判断,如果为了简单,整个项目所有类型都可以直接用 any 代替。

Optional 可选类型

可选类型只能在这样的场景下使用:

interface Person {
  name?: string
}

没有办法像 swift 或者 kotlin 那样更加优雅的使用:

let person: Person?
let name = person?.name

可选类型唯一的好处是传入的对象可以少一些属性,或者属性可以为 undefined,依然少不了要判断这个值是否存在,然后才能进行下一步。

私有属性

强类型语言都会有的东西,我们在 JavaScript 里面实现的方法是在变量或函数前面添加一个下划线来标识但实际毫无意义的做法。

其他

如果按着 TypeScript 或者说强类型语言的规范来,数据结构将会非常清晰,传入什么类型的值、传出什么类型的值、值的属性都将非常清晰,对于重构或者其他人接手,不会有看不懂的地方。

TypeScript 虽然目前看来有非常多的优点,但是由于 JavaScript 本身的问题和一些历史的包袱,现在还不能愉快的使用,还是需要等更多的开源项目采用 TypeScript 重构。

评论(2)