小编Kam*_*Lar的帖子

键入动态对象字段

假设我有一个具有联合类型的动态对象:

  foo: {[key in 'num' | 'str' | 'obj']: number | string | object};
Run Code Online (Sandbox Code Playgroud)

现在我分配对象属性如下:

  foo.num = 1;
  foo.str = 'text';
  foo.obj = {};
Run Code Online (Sandbox Code Playgroud)

它有效。但是,当我尝试访问时:

  foo.num
Run Code Online (Sandbox Code Playgroud)

并使用这个值 fe 通过总结所有foo.num属性来减少它- 我不能,因为编译器告诉我这foo.num是联合类型。如何告诉编译器foo.num是类型的number?我知道有一种方式,as但它不是优雅的方式。我一直在SO,Medium和其他编程站点中寻找答案,但找不到解决方案。

编辑:

这只是一个例子。我的真实案例是这样的。我有一个对象数组,我必须按它们的一个属性(枚举类型)进行分组,然后映射它们。所以我正在做这样的事情:

  foo: {[key in 'num' | 'str' | 'obj']: number | string | object};
Run Code Online (Sandbox Code Playgroud)

我虽然最好的方法是创建对象,它将存储所有subjects但所有这些都subjects在这个union类型的对象内。如果枚举值因某种原因发生变化,我只需要更改枚举类型,仅此而已。

unions typescript

2
推荐指数
1
解决办法
39
查看次数

标签 统计

typescript ×1

unions ×1