【发布时间】:2018-07-13 19:59:20
【问题描述】:
我有一个枚举:
enum MyEnum {
One,
Two,
Three
}
然后我有一个 React Component 的方法,它应该返回一个对象,其键只能是 MyEnum 的字符串键(意思是到目前为止:一、二、三):
myFunction = (someValue: {}[]): {} => {
return someValue.reduce((res, v, i) => {
res[v.name].push(v)
return res
}, {})
}
问题:如何动态定义该函数的返回值类型为对象,其键只能是MyEnum的字符串键?
现在只有 3 个,但是如果我在枚举中添加另一个,myFunction 的返回值的类型也应该更新。
更新 1:
尝试将Record<keyof typeof MyEnum, any> 分配为返回值:
myMethod = (someValue: {}[]): Record<keyof typeof MyEnum, any> => {
return someValue.reduce((res: any, v: SomeInterface) => {
res[v.name].push(v)
return res
}, {})
}
这不会抛出任何错误,但是如果我将reduce的返回值分配给一个变量,然后在其上添加另一个属性(其键不是MyEnum键),就不会出现错误,这不是我所寻求的:
myMethod = (someValue: {}[]): Record<keyof typeof MyEnum, any> => {
let someVar = someValue.reduce((res: any, v: SomeInterface) => {
res[v.name].push(v)
return res
}, {})
someVar.keyName = 'value'
return someVar
}
【问题讨论】:
-
Record<keyof typeof MyEnum, any>? -
@jcalz 什么是“记录”?
-
standard library 中的类型,其中
Record<K,V>表示“具有键K和值V的对象”。 -
@jcalz 我有一个 .reduce 方法,它产生返回值。并且整个构造都带有一个错误,即 MyEnum 的字符串值之一在函数的返回值中丢失。
-
您能否将相关代码和错误连同编译器错误一起编辑到您的问题中,以便有人可以帮助您调试?
标签: reactjs typescript