Typescript 类型脚本类型不使用扩展运算符
我有一个redux风格的reducer(我使用的是ngrx),它返回一个特定的类型。当我在返回对象中使用spread操作符时,typescript linter没有捕获无效属性 这是我的界面: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
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
});