Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类型为'的参数;从不[]和#x27;不可分配给类型为';绝不';在Typescript中声明类型时_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 类型为'的参数;从不[]和#x27;不可分配给类型为';绝不';在Typescript中声明类型时

Javascript 类型为'的参数;从不[]和#x27;不可分配给类型为';绝不';在Typescript中声明类型时,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在学习Typescript,并根据教程编写了以下代码: 接口待办事项{ 文本:字符串; 完成:布尔; } 类型状态=数组; 常量TodoReducer=(状态:状态,操作:操作)=>{ 开关(动作类型){ 案例“添加”: 返回控制台日志(“添加”); “删除”案例: 返回控制台日志(“删除”); 违约: } }; 常量输入:React.FC=({name,onChange})=>{ ... const[todos,dispatch]=React.useReducer(TodoReducer,

我正在学习Typescript,并根据教程编写了以下代码:

接口待办事项{
文本:字符串;
完成:布尔;
}
类型状态=数组;
常量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,[]);
...
};

只需尝试为state
const TodoReducer=(state:state=[],action:Actions):state=>{
还添加一个默认情况:
default:return[]
。目前您的减速机没有返回任何内容,请为
添加
删除
案例分配一些返回值。看来问题已经解决了。我想知道这是否是由于最近的更新,因为我下面的教程只有3个月。问题是添加
:State=>
。显然
用户教育者
希望教育者返回某物:)