Typescript 类型脚本类型不使用扩展运算符

Typescript 类型脚本类型不使用扩展运算符,typescript,ngrx,Typescript,Ngrx,我有一个redux风格的reducer(我使用的是ngrx),它返回一个特定的类型。当我在返回对象中使用spread操作符时,typescript linter没有捕获无效属性 这是我的界面: interface MyState { firstName: string; lastName: string; age: number; } 这是我的减速机操作是ngrx操作: function reducer(state = initialState, action: Act

我有一个redux风格的reducer(我使用的是ngrx),它返回一个特定的类型。当我在返回对象中使用spread操作符时,typescript linter没有捕获无效属性

这是我的界面:

interface MyState {
    firstName: string;
    lastName: string;
    age: number;
}
这是我的减速机<代码>操作是ngrx操作:

function reducer(state = initialState, action: Action): MyState {
    switch (action.type) {
        case Actions.COOL_ACTION:
            return {
                ...state,
                propertyDoesNotExist: action.payload, // <- no error
            };
        default:
            return state;
    }
}
函数缩减器(state=initialState,action:action):MyState{
开关(动作类型){
案例行动。酷_行动:
返回{
……国家,

propertyDoesNotExist:action.payload,//通过使用
…state
,返回的表达式不再是对象文本,如果它是返回类型的子类型(即具有额外属性),TypeScript不会抱怨。我自己遇到了这个问题,并编写了一个小的帮助函数来表示额外属性:

const applyChanges = <S, K extends keyof S>(state : S, changes : Pick<S, K>) : S =>
  Object.assign({}, state, changes);

返回applyChanges(状态{

propertyDoesNotExist:action.payload,//您正在描述示例中未定义的类:action、Actions、CalendarState。您能完成示例吗?最好也在中提供它。这就像有人问一个.NET问题,然后评论员说“我们不知道您在使用什么.NET类,您能添加这些吗?”不是真的,我不能真正添加ngrx库的代码。这就是为什么我在开头说一个…redux风格的减缩器…我可以重新构造我的问题来显示这个问题,但我必须拿出那个例子。这基本上就是我现在正在使用的代码。
return {...state,
    propertyDoesNotExist: action.payload, // <- no error
};
return applyChanges(state, {
    propertyDoesNotExist: action.payload, // <- error
});