当我使用Flow定义类型然后使用扩展运算符来处理它时,如果传入参数是A类型且输出类型为A(并且修改后的值为a),为什么Flow认为它是不精确的匹配? A)的财产。
例如,这失败了:
type A = {|
attrib1: string,
attrib2: string
|};
const processA = (a: A) : A => {
return {...a, attrib2: 'hello' };
}
答案 0 :(得分:2)
这是一个长期存在的错误,但只是(8天前)得到了一些提交!
请参阅https://github.com/facebook/flow/issues/2405
问题可以简化为:
/* @flow */
type A = {| a: string |}
const a: A = {a: 'x'}
const r: A = {...a}
针对master尝试此操作现在正在运行,但不是0.69.0
答案 1 :(得分:0)
看看上一个回答中提到的github问题,我将通过以下方式处理我的问题(直到我可以转到更新的Flow版本):
type _A = {
attrib1: string,
attrib2: string
};
type A = _A & $Shape<_A>;
const processA = (a: A) : A => {
return {...a, attrib2: 'hello' };
}
对于提供的简化示例重新解释此内容,它将如下所示:
/* @flow */
type _A = { a: string }
type A = _A & $Shape<_A>;
const a: A = {a: 'x'}
const r: A = {...a}