有一段时间开始使用带有 typescript 的 React,但总是对类型和 React 元素的期望感到困惑。
就像在这种情况下(这里也是沙箱)我得到了 Todos 组件的以下错误
在具有更漂亮和 TSLint 设置的 VSCODE 中:类型 '(props: PropsWithChildren) => Element[]' 不可分配给类型'FunctionComponent'。
在 Snadbox 中:类型 '(props: IProps) => void[]' 不可分配给类型 'FunctionComponent'。
import { TodoStore } from "./stores/TodoStore";
import { observable } from "mobx";
interface IProps {
todoStore: TodoStore;
}
// red underline at `TodoComp` with mentioned error message
const TodosComp: React.FC<IProps> = props => {
const { todos } = props.todoStore;
return todos.map(todo => {
<div key={todo.id}>
<p>{todo.title}</p>
<select />
</div>;
});
};
export default inject("todoStore")(observer(TodosComp));
Todos 的 Mobx 商店就像
import { decorate, observable, runInAction, action } from 'mobx';
export interface ITodo {userId: number; id: number; title: string; completed: boolean;
}
export class TodoStore {
public todos: ITodo[];
constructor() {
this.todos = [];
this.fetchTodos();
}
public async fetchTodos() {
const response = await fetch('http://jsonplaceholder.typicode.com/todos');
const todos: ITodo[] = await response.json();
runInAction(() => {
this.todos = todos;
});
}}
decorate<TodoStore>(TodoStore, { todos: observable, fetchTodos: action });
是 Mobx 的问题吗?如果类本身被用作组件中的类型?mobx 类需要单独的接口吗?
同样作为 Mobx 特定的问题是沙盒中正确实例化提供者商店类的方式?
一般来说,如果有人知道一篇关于 React with typescript 如何管理道具和 JSX 类型的好文章将不胜感激。