我一直在考虑将 Flow 添加到我的 javascript 项目中。
在某些情况下,我会做这样的事情,我有一个对象。
const myObject = {
x: 12,
y: "Hello World"
}
我有一个通用函数,可以对对象进行一些映射,保留键但替换值。
function enfunctionate(someObject) {
return _.mapValues(myObject, (value) => () => value)
}
我想要函数返回类型 {x: () => number, y: () => string}
有办法实现吗?
当然,我可以将其更通用地键入为 {[key: string]: any}
但我会失去很多我想通过使用流获得的静态类型。
如果我可以用可以工作的代码生成或宏替换我执行此操作的几个案例,但我看不到使用流程执行此操作的好方法。
有没有办法解决这个问题?
最佳答案
这是目前你能得到的最好的,虽然它比 {[key: string]: any}
更安全,但仍然涉及 any
function enfunctionate<O: Object>(someObject: O): { [key: $Keys<O>]: (...rest: Array<void>) => any } {
return _.mapValues(someObject, (value) => () => value)
}
const obj = enfunctionate(myObject)
obj.x() // ok
obj.unknown() // error
编辑:从 v.33 开始,您可以使用 $ObjMap
function enfunctionate<O>(o: O): $ObjMap<O, <V>(v : V) => () => V> {
return _.mapValues(o, (value) => () => value)
}
关于javascript - 对象上的流类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552899/