惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
A
About on SuperTechFans
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
D
DataBreaches.Net
B
Blog
博客园 - 【当耐特】
爱范儿
爱范儿
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
WordPress大学
WordPress大学
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
量子位
G
Google Developers Blog

BAIYUN'S BLOG

AI Coding 从小工到专家 - BAI YUN 电信 IPTV 内网融合教程:在局域网任意设备观看 IPTV - BAI YUN 美国住宅 IP 提供商体验对比 - BAI YUN Node.js 程序以 Keyless 模式从 1Password 读取密钥 - BAI YUN 高效优雅的观影指南 - BAI YUN 基于 Surge 的 DNS 优化指南 - BAI YUN RIME 鼠须管输入法简明使用教程 - BAI YUN 自动给不同 Git 项目设置不同的用户名邮箱 - BAI YUN Web3 新手如何选择加密货币钱包 - BAI YUN Web3 到底是什么? - BAI YUN 谨慎开启 Safari 的阻止跨站跟踪功能 - BAI YUN iOS Surge 开启后无法使用部分国产 APP 或网络出错的解决办法 - BAI YUN 屏蔽 Telegram 垃圾私信的有效办法 - BAI YUN 每个人都应该读一遍《1984》和《动物庄园》 - BAI YUN iOS 给常见机构号码增加联系人头像 - BAI YUN 在国内如何购买比特币和投资加密货币 - BAI YUN WEB 性能优化:如何让你的网站页面秒开(方法论) - BAI YUN 加密货币投资这件事 - BAI YUN 国内手机号注册推特教程 - BAI YUN 国内注册币安账号并通过 KYC 教程 - BAI YUN 使用一套助记词创建多个以太坊钱包账户 - BAI YUN Apple Watch 的几个用途 - BAI YUN 钱包安全指南:如何保护你的 NFT 和加密资产不被盗 - BAI YUN 我在 macOS 上高频使用的应用 - BAI YUN Web3 时代:如何使用 MetaMask 钱包实现一键登录 - BAI YUN 2022 年了 Safari 无法渲染渐变文字的 BUG 依旧存在 - BAI YUN 境外手机卡:澳门电信大湾区预付卡使用体验 - BAI YUN 解决 iCloud Drive 上传文件卡住的问题 - BAI YUN Electron 应用如何获取系统代理配置 - BAI YUN 解决 iOS 上 Google 账号登录会卡在加载状态的问题 - BAI YUN
使用 TypeScript 提升可维护性 - BAI YUN
baiyun · 2021-09-15 · via BAIYUN'S BLOG

合理使用 TS 的枚举类型

最近发现不少新手或有一定 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

本文原载于:baiyun.me

原文链接:https://baiyun.me/improve-maintainability-with-typescript

如果你喜欢我的内容,请考虑请我喝杯咖啡☕吧,非常感谢🥰 。

If you like my contents, please support me via BuyMeCoffee, Thanks a lot.