Javascript 类型为'的参数;从不[]和#x27;不可分配给类型为';绝不';在Typescript中声明类型时
我正在学习Typescript,并根据教程编写了以下代码:Javascript 类型为'的参数;从不[]和#x27;不可分配给类型为';绝不';在Typescript中声明类型时,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在学习Typescript,并根据教程编写了以下代码: 接口待办事项{ 文本:字符串; 完成:布尔; } 类型状态=数组; 常量TodoReducer=(状态:状态,操作:操作)=>{ 开关(动作类型){ 案例“添加”: 返回控制台日志(“添加”); “删除”案例: 返回控制台日志(“删除”); 违约: } }; 常量输入:React.FC=({name,onChange})=>{ ... const[todos,dispatch]=React.useReducer(TodoReducer,
接口待办事项{
文本:字符串;
完成:布尔;
}
类型状态=数组;
常量TodoReducer=(状态:状态,操作:操作)=>{
开关(动作类型){
案例“添加”:
返回控制台日志(“添加”);
“删除”案例:
返回控制台日志(“删除”);
违约:
}
};
常量输入:React.FC=({name,onChange})=>{
...
const[todos,dispatch]=React.useReducer(TodoReducer,[]);
...
};
但与教程不同的是,在我的例子中,我看到了错误
“never[]”类型的参数不能分配给“never”类型的参数
指向
29 | const[todos,dispatch]=React.useReducer(TodoReducer,[])
TodoReducer必须为每个案例事件返回一个有效状态-默认值 因此,如果你的例子是有效的,那么沿着这条思路做一些事情是可行的。我确实引入了空数组的默认状态
[]
,并为每个操作类型返回了状态。这一点你必须根据自己的需要进行调整
interface Todo {
text: string;
completed: boolean;
}
type State = Array<Todo>;
const TodoReducer = (state: State = [], action: Actions) => { // added a default state
switch (action.type) {
case "add":
console.log("add");
return state; // return your desired state
case "remove":
console.log("remove");
return state; // return your desired state
default:
return state; // you did miss return state or similar here in your example
}
};
const Input: React.FC<Props> = ({ name, onChange }) => {
...
const [todos, dispatch] = React.useReducer(TodoReducer, []);
...
};
接口待办事项{
文本:字符串;
完成:布尔;
}
类型状态=数组;
const TodoReducer=(state:state=[],action:Actions)=>{//添加了一个默认状态
开关(动作类型){
案例“添加”:
控制台日志(“添加”);
返回状态;//返回所需的状态
“删除”案例:
控制台日志(“删除”);
返回状态;//返回所需的状态
违约:
return state;//在您的示例中,您确实错过了return state或类似的内容
}
};
常量输入:React.FC=({name,onChange})=>{
...
const[todos,dispatch]=React.useReducer(TodoReducer,[]);
...
};
只需尝试为stateconst TodoReducer=(state:state=[],action:Actions):state=>{
还添加一个默认情况:default:return[]
。目前您的减速机没有返回任何内容,请为添加
和删除
案例分配一些返回值。看来问题已经解决了。我想知道这是否是由于最近的更新,因为我下面的教程只有3个月。问题是添加:State=>
。显然用户教育者
希望教育者返回某物:)