定义Context对象类型时遇报错:预期0个类型参数,却传入1个
问题解决:createContext类型参数报错 "Expected 0 type arguments, but got 1"
错误根源
你代码里的核心问题是导入路径错误:你从"vm"模块导入了createContext,但React的createContext属于"react"模块。Node.js内置的vm模块里的createContext函数不支持类型参数,这就是报错的直接原因。
修正步骤
- 修正
createContext的导入语句,将import { createContext } from "vm";替换为从"react"导入,同时可以合并所有React相关的导入,让代码更简洁 - 其余代码的类型定义和逻辑写法都是正确的,无需改动
修正后的完整代码
import { createContext, useState, FC } from "react"; import Todo from "../models/todo"; type TodosContextObj = { items: Todo[]; addTodo: (text: string) => void; removeTodo: (id: string) => void; }; export const TodosContext = createContext<TodosContextObj>({ items: [], addTodo: (text: string) => {}, removeTodo: (id: string) => {}, }); const TodosContextProvider: FC = (props) => { const [todos, setTodos] = useState<Todo[]>([]); const addTodoHandler = (enteredText: string) => { const newTodo = new Todo(enteredText); setTodos((prevTodos) => prevTodos.concat(newTodo)); }; const removeTodoHandler = (todoId: string) => { console.log(todoId); setTodos((prevTodos) => prevTodos.filter((todo) => todo.id !== todoId)); }; console.log(todos); const contextValue: TodosContextObj = { items: todos, addTodo: addTodoHandler, removeTodo: removeTodoHandler, }; return ( <TodosContext.Provider value={contextValue}> {props.children} </TodosContext.Provider> ); }; export default TodosContextProvider;
额外优化说明
- React的
FC类型默认已经包含children?: React.ReactNode属性,无需额外定义FC<{ children?: React.ReactNode }>,直接写FC即可 - 合并React相关的导入语句,让代码结构更整洁
内容的提问来源于stack exchange,提问作者Adnan Khan
相关产品推荐
相关产品推荐

