React-Redux TS:TypeScript抱怨connect()调用
我花了几个小时试图弄清楚为什么TypeScript不喜欢我的connect()调用,但我不能这样做,因为错误消息有点神秘(就像许多TypeScript警告一样),而且Redux定义文件也相当复杂。这是我的.tsx文件: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
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
调用中重现错误,可能是因为我没有从您的项目中导入其他文件。如果您需要我的帮助,您需要提供足够的代码来重现问题,可以手动将相关代码合并到单个代码段中,也可以发布我可以下载的存储库。