假设我有一个具有联合类型的动态对象:
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类型的对象内。如果枚举值因某种原因发生变化,我只需要更改枚举类型,仅此而已。