打字稿如何更新每个对象值

Posted

技术标签:

【中文标题】打字稿如何更新每个对象值【英文标题】:Typescript How to update every object value 【发布时间】:2020-04-25 09:30:34 【问题描述】:

我有一个这样的对象:

enum FeatureNames = 
  featureA = 'featureA',
  featureB = 'featureB',
  featureC = 'featureC'


interface FeatureDetails 
  on: boolean;


type Features = Record<FeatureNames,FeatureDetails>;

const myObj: Features = 
  [FeatureNames.featureA]: 
    on: true
  ,
  [FeatureNames.featureB]: 
    on: false
  ,
  [FeatureNames.featureC]: 
    on: false
  

如何更新myObj 的每个成员的值,使on 的值为真?

如果没有 typescript,我只会使用 reduce,但是当我尝试这样做时会出现过载错误。

这是错误:

元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“记录”。 在“记录”类型上找不到带有“字符串”类型参数的索引签名.ts(7053)

【问题讨论】:

考虑编辑您的代码以构成minimal reproducible example,如How to Ask 所述。 FeatureNames 是什么? FeatureDetails 是什么?您看到什么具体错误以及在什么代码中? 【参考方案1】:

您可以在 reduce 函数中显式转换 key 参数:

Object.keys(myObj).reduce((obj, key) => (obj[key as FeatureNames].on = true, obj), myObj)

【讨论】:

谢谢!这正是我需要做的。不过做起来超级乏味……

以上是关于打字稿如何更新每个对象值的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:如何根据对象键/值类型在 ES6 映射中创建条目

更新可观察打字稿中的数组值

打字稿:如何在对象更改时更新选择

具有定义值的打字稿动态对象键

打字稿:如何在对象更改时使用动态表行更新表

打字稿如何定义对象,其中键的值取决于另一个键