有人可以解释一下,当它是对象属性时,为什么 flow 不接受更多限制类型的参数来运行期望更少限制类型的函数?https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgCSAdjgK4ZgC8YA3qmGNvgFxgDOGATgJbEDmAGlQBfANzpmBAPIVylGvUZS2AcgByAQwBuq4SPQBjOMU5gocONTAAKAJRtZGedQB8tpU1x41W3frsJVGNTSgAjTS5rGz55NhJ5Ozc6BjAQ9jgYPAA6eH4bVViKPTAijECwUXQIrhsLOHtAoA/* @flow */type Input = { type: string,};type Output = { type: 'Nav',}const foo = (): Output => ({ type: 'Nav',});const bar = (input: Input) => { console.log('input', input); }bar(foo());错误:19: bar(foo()); ^ Cannot call `bar` with `foo()` bound to `input` because string literal `Nav` [1] is incompatible with string [2] in property `type`.References:8: type: 'Nav', ^ [1]4: type: string, ^ [2]我是否遗漏了文档中的某些内容?
1 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
关于方差的文档应该让您开始了解为什么更具体的输入很麻烦。在您的情况下,Flow 不知道您的函数将如何处理输入,因此担心bar
可能会修改其输入。例如,bar
可能会更改input.type
为'some string'
,这将违反Output
类型。您可以标记input
为一种$ReadOnly<Input>
类型,以便为 Flow 提供bar
不会修改的保证input
。
添加回答
举报
0/150
提交
取消