精确的对象类型定义和解构

时间:2017-02-13 17:22:14

标签: javascript flowtype

我正在定义一个具有确切形状的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

这种流程是不是理解解构还是我遗漏了什么?我注意到将类型定义更改为非严格(删除括号括号)将使此代码通过。但是我试图阻止任何拼写错误。

谢谢!

1 个答案:

答案 0 :(得分:4)

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