每日TS小技巧:不用Enum枚举类型做值运算

247 阅读1分钟

枚举

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。

示例

enum Direction { 
    Up = 1, 
    Down, 
    Left, 
    Right 
}

背景

由于枚举类型在其类型性质上是一个具有值属性的集合,所以有的人会在写代码的时候使用枚举类型进行值运算或者与字符串数字进行比较

    const personDirection = [ "jax", "li", "berry", "king"]
    console.log( "上面的人是谁", personDirection[Direction.Up - 1] ) // 不会报错
    
    const json: Direction = getXXX() // 获取一个Direction的值
    if(json !== 2) // 不会报错
    ...

一旦枚举类型改变,这里的代码将变成糟粕代码而被人诟病

改进

枚举类型只当作key或者id来使用!

const personDirection: {[key in Direction]: string} = {
    [Direction.Up]: "jax",
    ...
}
console,log("上面的人是谁", personDirection[Direction.Up])

const json: Direction = getXXX() 
if(json !== Direction.Down) 

总结

优点:

1.解决了枚举类型值耦合的情况
2.代码更加直观,语义化明显

缺点:

1.写的太麻烦

非常好用!你学废了吗?

---------- 💃💃💃坚持每日一个ts小技巧💃💃💃 -----------