为什么使用 TypeScript ?

TypeScript 和 JavaScript

TypeScript 和 JavaScript(以下分别简称为 TS 和 JS),的关系就像是爸爸和儿子的关系,TS 是基于 JS 的,增加了类型系统。

JS 的代码可以无缝切换到 TS (TS 的类型检查仅用于编译时,运行时是管不到的,但是既然编译时都明确了有问题了,就不要强行编译了)。

而 TS 的代码则无法直接切换到 JS 中,因为 JS 无法识别 TS 的类型系统。(但是可以通过编译为 JS 文件让 TS 代码在 JS 中作用)。

让一切变得已知

我是喜欢使用 TS 的。相对于哪些不知道变量类型,参数类型,不知道返回类型,不知道数据格式的未知。我更喜欢的是通过类型标注使得这一切变得已知。

特别是在多人团队协作开发时,这一切就显得非常重要。

以我目前所在的团队为例,迄今为止,未判空,数据少传,参数给错,变量赋值错误这几项占据了至少八成以上的问题。(以变量赋值错误为例,本来是应该传数据对象的,但是传成了在列表中的索引)。

如果引入了 TS,那么可以避免至少大部分的错误。

至于为什么是大部分而不是全部,因为有 any 类型。顾名思义,它可以表示任意类型,使得类型检查失效。所以 TS 也被调侃为 AnyScript。

此外,维护者也可以直接通过类型标注来查看确认代码作用,而不是翻使用,翻实现来一个个查看。

上手并不复杂

其实简单来说,如果能会 JS,就相当于会了 TS,因为 TS 是基于 JS 的,只是增加了类型系统。

// JS
function computedAddition (n1,n2) {
  const n = n1 + n2
  return n
}
// TS
function computedAddition (n1: number, n2: number): number {
  const n: number = n1 + n2
  return n
}

以上分别是一个 JS 和 TS 的计算两数相加的示例。

可以看见,在 JS 的基础上, TS 标注了函数参数类型,函数返回类型,变量类型。

但是实际上一般并不用这么麻烦,除了函数参数会需要标注外,其他的一般并不需要手动标记。

因为 TS 会自动进行类型推导给我们进行类型标注,我们 n 赋值的是 n1 + n2 , 因为它俩都是 number 类型,相加也是 number ,所以常量类型就是 number 。我们返回了 n ,它是 number 类型,所以函数返回值就是 number

// TS

interface Data {
  id:number
  name:string
}

type Fn = (n1: number, n2: number) => Data

const fn: Fn = (n1, n2) => ({
  id: n1 + n2,
  name: 'example'
})

以上是一个 TS 的类型系统的简单示例,我们定义了一个 Data 接口,Fn 类型,并实现了一个 fn 函数。

TS 逐渐被放弃?

可能有些人会说 TS 不行,什么什么库啊,框架什么的说放弃使用了 TS,改回使用 JS,并加以 JSDoc 进行类型辅助。

关于这一点,首先要有一个前提,就是你的团队成员的平均素质要高。高到可以抹平这个差异。

“人家那是可以直接骑着自行车上路的高手,而不是需要使用辅助轮才能不翻车的菜鸟”。


为什么使用 TypeScript ?
http://localhost:8080/archives/wei-shi-me-shi-yong-typescript
作者
inksha
发布于
2024年12月04日
许可协议