我正在使用TypeScript 2.x和Redux。我有一个减速器接收一个动作,基于此我希望创建一个没有这样的项目的新状态:
export function reducer(state = {}, action) {
switch (action.type) {
case SOME_ACTION:
let newState : { something: string } = state;
delete newState.something;
return newState;
default:
return state;
}
}
感谢@basarat我找到了删除内容的基础知识(请参阅TypeScript 2: Remove item from 2-field object)。上面的代码基于该建议,但现在我改为
TS2322: Type '{}' is not assignable to type '{ something: string; }'.
Property 'something' is missing in type '{}'.
据我所知,这意味着我需要以某种方式推断传入状态的类型以删除此项。
键入Redux状态的最佳方法是什么?或者有替代方法吗?
答案 0 :(得分:0)
不要使用redux改变状态。例如。以下不是一个好主意
delete newState.something;
而是创建一个没有该支柱的新对象,例如
const {something, ...newState} = state;
return newState;
除此之外,您需要注释state
。对于快速黑客攻击,您只需any
:
export function reducer(state:any = {}, action) {
但如果你仍然感到困惑,你应该阅读更好的注释:https://basarat.gitbooks.io/typescript/docs/types/type-system.html