javascript - 在 Typescript 中声明类型时,类型 'never[]' 的参数不可分配给类型 'never' 的参数

标签 javascript reactjs typescript

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

interface Todo {
  text: string;
  completed: boolean;
}

type State = Array<Todo>;

const TodoReducer = (state: State, action: Actions) => {
  switch (action.type) {
    case "add":
      return console.log("add");
    case "remove":
      return console.log("remove");
    default:
  }
};

const Input: React.FC<Props> = ({ name, onChange }) => {
  ...
  const [todos, dispatch] = React.useReducer(TodoReducer, []);
  ...
};

但与教程不同的是,就我而言,我看到了错误

Argument of type 'never[]' is not assignable to parameter of type 'never'

指向

29 | const [todos, dispatch] = React.useReducer(TodoReducer, []);

最佳答案

TodoReducer 必须为每种情况返回有效状态 - 事件为默认状态。

因此,类似的内容将使您的示例有效。我确实引入了空数组 [] 的默认状态,并为每个操作类型返回了 state。您必须根据您的需要进行调整。

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, []);
  ...
};

关于javascript - 在 Typescript 中声明类型时,类型 'never[]' 的参数不可分配给类型 'never' 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59249256/

相关文章:

javascript - 为什么我不能在浏览器中构造 `WebAssembly.Memory`?

javascript - onclick 在 View 内显示重复的 json 结果

css - 如何使用:-ms-reveal as inline style in react?

javascript - 用 Enzyme 听 onClick

Angular/如何获取api返回数据

javascript - 遍历 dom 并选择每个输入框对以创建 js 对象

javascript - 单击事件后,jQuery slideDown() 函数对两个元素均不起作用

angular - 从服务返回的 Observable 的单元测试值(使用异步管道)

javascript - 从 React 中的组件导出值

javascript - 无法在 Typescript 中使用 bool 值 promise 作为 thenable 构造?