React-Redux TS:TypeScript抱怨connect()调用

React-Redux TS:TypeScript抱怨connect()调用,typescript,redux,react-redux,Typescript,Redux,React Redux,我花了几个小时试图弄清楚为什么TypeScript不喜欢我的connect()调用,但我不能这样做,因为错误消息有点神秘(就像许多TypeScript警告一样),而且Redux定义文件也相当复杂。这是我的.tsx文件: import { addTodo, removeTodo } from "@test-shared/redux"; import { IAppState, ITodoItem } from "@test-shared/types"; import React from "reac

我花了几个小时试图弄清楚为什么TypeScript不喜欢我的connect()调用,但我不能这样做,因为错误消息有点神秘(就像许多TypeScript警告一样),而且Redux定义文件也相当复杂。这是我的.tsx文件:

import { addTodo, removeTodo } from "@test-shared/redux";
import { IAppState, ITodoItem } from "@test-shared/types";
import React from "react";
import { connect } from "react-redux";
import { Dispatch } from "redux";
import styled from "styled-components/native";
import uuid from "uuid/v4";
import TodoAdder from "./TodoAdder";
import TodoList from "./TodoList";

interface ITodosProps {
  saveTodo: (todo: ITodoItem) => void;
  deleteTodo: (id: string) => void;
  todos: ITodoItem[];
}

/**
 * List and add new Todos
 * @param props
 */
function Todos(props: ITodosProps): JSX.Element {
  const { saveTodo, deleteTodo, todos } = props;

  /**
   * On Todo remove handler
   * @param id
   */
  const onRemove = (id: string) => {
    deleteTodo(id);
  };

  /**
   * On Todo add handler
   * @param text
   */
  const onAdd = (text: string) => {
    const todo = { id: uuid(), text };

    // Save to state
    saveTodo(todo);
  };

  return (
    <TodosView>
      <TodosItems>
        <TodoList todos={todos} onRemove={onRemove} />
      </TodosItems>
      <TodoAdderWrapper>
        <TodoAdder onAdd={onAdd} />
      </TodoAdderWrapper>
    </TodosView>
  );
}

const ConnectedTodos = connect(
  (state: IAppState) => ({
    todos: state.items
  }),
  (dispatch: Dispatch) => ({
    deleteTodo: (id: string) => {
      dispatch(removeTodo(id));
    },
    saveTodo: (todo: ITodoItem) => {
      dispatch(addTodo(todo));
    }
  })
)(Todos);

export default ConnectedTodos;

const TodosView = styled.View`
  flex: 1 0 auto;
  padding: 10px;
`;

const TodoAdderWrapper = styled.View`
  flex-grow: 0;
`;

const TodosItems = styled.View`
  flex-grow: 1;
`;
从“@test shared/redux”导入{addTodo,removeTodo}”;
从“@test shared/types”导入{IAppState,ITodoItem};
从“React”导入React;
从“react redux”导入{connect};
从“redux”导入{Dispatch};
从“样式化组件/本机”导入样式化;
从“uuid/v4”导入uuid;
从“/ToLoader”导入ToLoader;
从“/TodoList”导入TodoList;
接口和道具{
saveTodo:(todo:ITodoItem)=>void;
deleteTodo:(id:string)=>void;
待办事项:ITodoItem[];
}
/**
*列出并添加新的TODO
*@param道具
*/
函数Todos(props:ITodosProps):JSX.Element{
const{saveTodo,deletetetodo,todos}=props;
/**
*关于Todo删除处理程序
*@param-id
*/
const onRemove=(id:string)=>{
deletetetodo(id);
};
/**
*关于Todo添加处理程序
*@param text
*/
const onAdd=(文本:字符串)=>{
const todo={id:uuid(),text};
//保存到状态
保存todo(todo);
};
返回(
);
}
const ConnectedTodos=连接(
(状态:IAppState)=>({
待办事项:state.items
}),
(分派:分派)=>({
deleteTodo:(id:string)=>{
派送(移除(id));
},
saveTodo:(todo:ITodoItem)=>{
调度(addTodo(todo));
}
})
)(待办事项);
导出默认的ConnectedTodos;
const TodosView=styled.View`
弹性:10自动;
填充:10px;
`;
const ToLoaderWrapper=styled.View`
flex-grow:0;
`;
const TodosItems=styled.View`
柔性生长:1;
`;
TypeScript正在抱怨connect()调用,错误如下:

Argument of type '(props: ITodosProps) => Element' is not assignable to parameter of type 'ComponentType<never>'.
  Type '(props: ITodosProps) => Element' is not assignable to type 'StatelessComponent<never>'.
    Type 'Element' is not assignable to type 'ReactElement<any>'.
      Types of property 'type' are incompatible.
类型为“(props:ITodosProps)=>Element”的参数不可分配给类型为“ComponentType”的参数。 类型“(props:ITodosProps)=>元素”不可分配给类型“无状态组件”。 类型“Element”不可分配给类型“ReactElement”。 属性“type”的类型不兼容。 有什么想法吗?

我试试看

const Todos: React.SFC<ITodosProps> = (props) => {
// your code here
}
const Todos:React.SFC=(道具)=>{
//你的代码在这里
}

但是,如果没有完整的代码,很难提供帮助

我将代码粘贴到一个文件中,无法在
connect
调用中重现错误,可能是因为我没有从您的项目中导入其他文件。如果您需要我的帮助,您需要提供足够的代码来重现问题,可以手动将相关代码合并到单个代码段中,也可以发布我可以下载的存储库。