gpt4 book ai didi

javascript - 将带有枚举的属性传递给需要带有字符串的属性的函数

转载 作者:行者123 更新时间:2023-12-02 23:32:39 24 4
gpt4 key购买 nike

有人可以解释一下,为什么当它是一个对象属性时,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]

我是否遗漏了文档中的某些内容?

最佳答案

关于 variance 的文档应该让您开始理解为什么更具体的输入很麻烦。在您的情况下,Flow 不知道您的函数将如何处理输入,因此担心 bar可以修改其输入。例如,bar可能会改变input.type'some string' ,这将违反Output类型。您可以标记input作为$ReadOnly<Input>类型为 Flow 提供保证 bar不会修改input .

关于javascript - 将带有枚举的属性传递给需要带有字符串的属性的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com