我不明白,为什么一旦在声明中使用interface ITitleIconSwitch
的类型为state
的{{1}}时总是出现错误。
interface ITitleIconSwitch {
'TITLE_ICON_SWITCH': (state: object) => {
state: object; // this line provides me with an error stack. But! Without 'state' interface works fine. Why?
titleSwitch: boolean;
}
}
const actionHandlers: ITitleIconSwitch = {
'TITLE_ICON_SWITCH': state => ({
...state,
titleSwitch: false
})
}
错误消息:
TS2322:
键入'{[TITLE_ICON_SWITCH] :(状态:对象)=> {titleSwitch:false; }; }”不能分配给“ IActionHandlers”类型。
键入'{[TITLE_ICON_SWITCH] :(状态:对象)=> {titleSwitch:false; }; }”不能分配给“ IStateUpdate”类型。
类型'{{TITLE_ICON_SWITCH]中缺少属性“ STATE_UPDATE” :(状态:对象)=> {titleSwitch:false; }; }'。
答案 0 :(得分:1)
您需要将reducer的类型编写为函数,而不是对象,因为您以面向对象的风格声明了reducer。因此,您需要对此减速器的类型进行相同的操作:
{
id: 37429,
debug: true,
title: '37429',
filters: {
3: {
title: '3',
all: true,
values: {
2006: {
title: '2006',
order: 0,
checked: true
}
},
indicator: false
},
58835: {
title: '58835',
all: false,
values: {
1785924: {
title: '1785924',
checked: true
}
},
indicator: false
},
58423: {
title: '58423',
all: false,
values: {
1785900: {
title: '1785900',
checked: true
}
},
indicator: false
}
}
}
,然后将它们添加到特定的reducer:
export interface ITitleIconSwitch { . // typing for reducer
[TITLE_ICON_SWITCH]: (state: object) => {
titleSwitch: boolean
}
}
export interface ITitleState { // typing for reducer state
titleSwitch: boolean
}