我想要做的是非常基本的。给定一个对象,并且不关心属性名称,我想确保它的所有值都是某种类型。
因此我有类似下面的代码:
// @flow
type DynamicStructure = {
[string]: number
}
const key: string = "someKey"
const someStructure: DynamicStructure = {
[key]: "invalid, should be a number"
}
奇怪的是我得到了“没有错误!”在上面的代码上应用Flow之后,这显然是错误的。您可以在Flow REPL
上验证此行为另一方面,当我不为对象使用动态访问器时,一切都按预期工作。例如,对于以下代码,我得到了预期的错误:
// @flow
type DynamicStructure = {
[string]: number
}
const someStructure: DynamicStructure = {
"someKey": "invalid, should be a number"
}
我做错了吗?或者这是一个Flow问题?
提前致谢。
答案 0 :(得分:1)
是的,这看起来像一个Flowtype错误:https://github.com/facebook/flow/issues/2928
答案 1 :(得分:0)
Flow是一种静态类型检查器。由于这个原因,它在处理计算属性方面存在许多缺点。
你有一个非常合理的例子说明流程如何“可以”起作用,但是你假设它跟踪文字对变量的赋值,并且没有可能导致它使其思想无效的副作用当用作计算属性时变量是否保持不变。
请参阅文档中的refinement invalidations