作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以解释一下,为什么当它是一个对象属性时,flow 不接受限制性更强的类型的参数来函数期望限制性较小的类型?
/* @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]
我是否遗漏了文档中的某些内容?
最佳答案
关于 variance 的文档应该让您开始理解为什么更具体的输入很麻烦。在您的情况下,Flow 不知道您的函数将如何处理输入,因此担心 bar
可以修改其输入。例如,bar
可能会改变input.type
至'some string'
,这将违反Output
类型。您可以标记input
作为$ReadOnly<Input>
类型为 Flow 提供保证 bar
不会修改input
.
关于javascript - 将带有枚举的属性传递给需要带有字符串的属性的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428897/
我是一名优秀的程序员,十分优秀!