使用 TypeScript 提升可维护性

Sep 15, 2021

合理使用 TS 的枚举类型

最近在 Code Review 中发现还是有很多使用 TS 的开发同学并没有充分发挥 TS 枚举值的能力,代码中很容易见到 if(status === 1){} else if (status === 2){} 这种魔法数字,项目只要稍微复杂一些,这种魔法数字维护起来就是一场灾难。

ProTable@2x.jpg

类似上图中的枚举状态在开发中很常见,我们可以使用 TS 的枚举类型来提高维护性,减少 bug

bad:

if (status === 1) {
   //
} else if (status === 2) {
  //
}

good:

export enum TaskStatus {
  // 处理中
  processing = 0,
  // 成功
  success = 1,
  // 异常
  error = 2,
}

if (status === TaskStatus.processing) {
   // 处理中
} else if (status === TaskStatus.success) {
  // 成功
} else if (status === TaskStatus.error) {
  // 异常
} else {
  // 无效的枚举值
}

当然你也可以使用 switch 语句代替上面的写法。

在类型定义文件引入枚举值

有时候你可能需要在一些全局的 .d.ts 类型声明文件中引用其他模块中定义的枚举值,这种情况可以通过 import() 语句来引入其他枚举值而不破坏 .d.ts 文件的作用范围,例如

bad:

// xxx.d.ts
import { AppType } from '@/componets/AppCard'
declare interface AppState {
  name: string
  type: AppType
}

good:

// xxx.d.ts
declare interface AppState {
  name: string
  type: import('@/componets/AppCard').AppType
}

尽量避免使用 any

ts-man.png

这篇文章对你有帮助吗?