Javascript 如何在定义了返回流类型的减速器上使用Object.assign with literals

Javascript 如何在定义了返回流类型的减速器上使用Object.assign with literals,javascript,reactjs,ecmascript-6,flow-js,Javascript,Reactjs,Ecmascript 6,Flow Js,我正在编写一个reducer,它将与React.useReducerhook一起使用。使用了流,但由于Object.assign({},state…将{}作为与SearchLocationStateType不兼容的对象文本,因此还原程序遇到了流错误。 我找到的唯一解决方案是列出每个对象文字的所有属性,这不是正确的方法 我怎样才能解决这个问题 type SearchLocationStateType = { textAreaFocused: boolean, promptsShow

我正在编写一个reducer,它将与
React.useReducer
hook一起使用。使用了流,但由于
Object.assign({},state…
{}
作为与
SearchLocationStateType
不兼容的对象文本,因此还原程序遇到了流错误。 我找到的唯一解决方案是列出每个对象文字的所有属性,这不是正确的方法

我怎样才能解决这个问题

type SearchLocationStateType = {
    textAreaFocused: boolean,
    promptsShown: boolean,
};

export const ACTIONS = Object.freeze({
    FOCUS_SEARCH_TEXT: 'FOCUS-SEARCH-TEXT',
    BLUR_SEARCH_TEXT: 'BLUR-SEARCH-TEXT',
});

type ActionType = {
    type: $Values<typeof ACTIONS>,
};

const reducer = (state: SearchLocationStateType, action: ActionType): SearchLocationStateType => {
    switch (action.type) {
        case ACTIONS.FOCUS_SEARCH_TEXT:
            return Object.assign({}, state, {textAreaFocused: true});
        case ACTIONS.BLUR_SEARCH_TEXT:
            return Object.assign({}, state, {textAreaFocused: false});
        default:
            return state;
    }
};
type SearchLocationStateType={
textAreaFocused:boolean,
提示显示:布尔,
};
export const ACTIONS=Object.freeze({
焦点搜索文本:“焦点搜索文本”,
模糊搜索文本:“模糊搜索文本”,
});
类型ActionType={
类型:$value,
};
const reducer=(状态:SearchLocationStateType,操作:ActionType):SearchLocationStateType=>{
开关(动作类型){
案例操作。焦点\搜索\文本:
返回Object.assign({},state,{textAreaFocused:true});
案例操作.BLUR\u搜索\u文本:
返回Object.assign({},state,{textAreaFocused:false});
违约:
返回状态;
}
};

使用类型转换不够,如下所示:return Object.assign({},state,{textAreaFocused:true})作为SearchLocationStateType;可能您的意思是
return(Object.assign({},state,{textAreaFocused:true}):SearchLocationStateType);
但这会引发同样的问题,就在括号内您可以发布错误消息吗?出于好奇,您是否有理由选择Object.assign而不是Object Destructuring?作为替代,您可以始终使用属性扩展语法:
返回{…state,textAreaFocused:true};