如何解决如何解决 useReducer 钩子的类型错误“参数不可分配给类型为 never 的参数”?
将鼠标悬停在 todos
函数中的 useReducer
变量上:
const [state,dispatch] = useReducer(reducer,todos);
给出以下类型错误。
Argument of type 'TodoState[]' is not assignable to parameter of type 'never'.
我已经尝试在我的 reducer 函数中添加 TodoState[]
作为返回类型,以确保我不会意外返回 never[]
,但是错误仍然存在:
以下是相关代码:
interface TodoState {
id: string;
}
interface TodoAction {
type?: 'CREATED' | 'DELETED' | 'UPDATED';
payload?: TodoState;
}
interface TodoReducer {
state: TodoState[];
action: TodoAction;
}
interface TodosProviderProps {
children: ReactChildren;
todos: TodoState[];
}
const reducer = ({ state = [],action = {} }: TodoReducer): TodoState[] => {
const { payload,type } = action;
const mutatedItem = payload;
if (!mutatedItem) {
return state;
}
const mutatedIndex = state.findIndex((item) => item.id === mutatedItem.id);
switch (type) {
case 'CREATED':
if (mutatedIndex < 0) {
state.push(mutatedItem);
}
break;
case 'DELETED':
if (mutatedIndex >= 0) {
state.splice(mutatedIndex,1);
}
break;
case 'UPDATED':
state[mutatedIndex] = mutatedItem;
break;
default:
return state;
}
return state;
};
export function TodosProvider({ children,todos }: TodosProviderProps) {
const [state,todos);// type error for todos here
// rest of code
}
解决方法
阅读文档后,我发现,reducer 函数传递了两个参数,而不是您解构的对象。
所以,该行应该是:
const reducer = (state:TodoState[] = [],action:TodoAction = {}): TodoState[] => {
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。