精确对象类型定义和解构

问题描述:

我限定具有精确形状的State类型:精确对象类型定义和解构

type State = {| someString: string, someNumber: number |}; 

我的初始状态满足这样的定义:

const initialState : State = { 
    someString: 'hey', 
    someNumber: 1, 
}; 

创建函数,接受状态,并返回一个但它的修改后的副本不,但:

function doStuff (state : State) : State { 
    return { 
    ...state, 
    someNumber: 2, 
    }; 
} 

src/flowTest.js:10 10: return { 
      ^object literal. Inexact type is incompatible with exact type 
9: function doStuff (state : State) : State { 
             ^^^^^ exact type: object type 

这个流程不明白解构或我错过了什么?我注意到,将类型定义更改为非严格(移除方括号)将允许此代码通过。但是,我试图让我防止任何错别字。

谢谢!

+2

看起来像https://github.com/facebook/flow/issues/2405? – loganfsmyth

+0

@loganfsmyth哎,你是对的...我希望我之前发现过这个问题。随意写一个答案指出这个问题,我会标记为正确的。 –

Flow对象传播的当前支持还有点欠缺,而Exact对象语法也相对较新。在这种情况下,https://github.com/facebook/flow/issues/2405似乎是您遇到的问题。