javascript - 对象上的流类型

标签 javascript flowtype

我一直在考虑将 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/

相关文章:

javascript - AngularJS:带有过滤器和 ng-change 的 ng-options

javascript - 从 JSON 数据构建表格布局(代码改进)

javascript -//@流: Uncaught ReferenceError: number is not defined

javascript - 可以将 Array<Object> 分配给任何类的数组

javascript - Angular 资源更新不起作用

Javascript charAt 在一个字符串中进行不同的音译

javascript - 删除鼠标悬停时的 Canvas 矩形边框

javascript - 函数/对象字面量之前的问号意味着

javascript - 为什么 Flow 无法使用方法参数的默认值推断类型

javascript - 将函数类型分配给对象的方法