【问题标题】:Enums as Keys for Types ... should this be a record. Why?枚举作为类型的键......这应该是一个记录。为什么?
【发布时间】:2021-06-10 09:19:43
【问题描述】:

(⚠ TypeScript 新手)

❓

好的,我已经完成了一些我认为有帮助的事情,但现在我想知道我是否应该只使用一个记录类型,甚至只使用一个类?


设置

这是它的症结所在。我正在定义一个使用枚举作为键的类型。当我扩展枚举时,枚举和类型 ~benefit~ 都会受到影响。

枚举宏 { 脂肪='脂肪', 蛋白质='蛋白质', 碳水化合物='碳水化合物', 卡路里='卡路里' } 类型 NutritionMacrosFields = { [宏中的键]:数字 } 接口 Food 扩展 NutritionMacrosFields { 数量:数量, 只读 baseServing :数字 }

这是有帮助的另一种方式

我能做到吗:

函数updateMacros(f:食物,增加:数字){ for( 让 m 在宏中){ 让 _m = m 作为宏; f[_m] = Math.ceil(f[_m] * 增加); }

playground

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您实际上不能将 Enum 用作记录的键。 NutritionMacrosFields 中的键不保留 Enum 成员。它们只是与 Enum 成员具有相同值的字符串,因为您已经从 Enum 中提取了值。

    在这种情况下,您最好使用类似的联合

    type Nurtition = 'fat' | 'protein' | 'carbohydrates' | 'calories'
    
    type NutritionMacrosFields = { 
       [key in Nurtition] : number 
    }
    

    要真正从 Enum 中受益,您希望将其用作记录的值。

    Enum Diet {
      Palio = 'palio',
      Keto = 'keto'
    }
    
    const banana = {
       dietType: Diet.Keto
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多