javascript - 无法对不变多态类的数组进行建模

标签 javascript flowtype

有没有一种方法可以在不注释 A<+T> 的情况下对此进行建模?

class A<T> {
  static value: T  
}

declare var Bar: Class<A<string>>
declare var Baz: Class<A<number>>

function foo<T, U: T>(...rest: $ReadOnlyArray<Class<A<U>>>): Array<T> {
  return rest.reduce((init, { value }) => ([ ...init, value ]), [])
}

(foo(Bar, Baz): Array<string | number>)

错误

5: declare var Bar: Class<A<string>>
                            ^ string. This type is incompatible with
6: declare var Baz: Class<A<number>>
                            ^ number
6: declare var Baz: Class<A<number>>
                            ^ number. This type is incompatible with
5: declare var Bar: Class<A<string>>
                            ^ string

https://flow.org/try/#0MYGwhgzhAECCA8AVAfNA3gKGtCAXMuAlsNAG5ggCuApgFzSLYYC+GGAJtaGAE7Vm9oAIV70AwuCjwEeHoQB2Ac2TIOXcHwE9hYAF7jJEafHmUAtgCNqPFVmz2MAM0rzgRAPbzoj9+6QAaaABVehQACgA6KL48egASACVqMHYAeXkQAE9YHh4wTPgJSCMEIJVkAEp6HLyClHQ7PlxKHi8Y3Ai+dkpgajCwhUJcQLQBKn5mCugAXlQwgG1oKIjB4bGaaABdCsD57ZY7ewcwn3cwkR5AkV0quFz8+FkFRWgAH2hTS2tKoA

最佳答案

我不是 Flow 方面的专家,但我相信你可以通过改变来实现它

$ReadOnlyArray<Class<A<U>>>

$ReadOnlyArray<{+value: U}>

关于javascript - 无法对不变多态类的数组进行建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171594/

相关文章:

javascript - 如何提交焦点表单

javascript - 如何使用 Flow 键入默认导出?

javascript - 使用 flowtype 和 flow-typed 输入 redux store

javascript - Sequelize TypeError : Cannot convert undefined or null to object

javascript - 防止 JavaScript Number 函数舍入大数字

Javascript,有没有办法将数组编写为没有逗号或空格的单个文本字符串?

javascript - 函数参数中 ?() => void 的目的是什么

javascript - FlowType : why function types have named parameters ? 他们的目的是什么?

javascript - eslint-plugin-flowtype 不验证

javascript - 将额外参数传递给 jquery ajax Promise 回调