You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定义Context对象类型时遇报错:预期0个类型参数,却传入1个

问题解决:createContext类型参数报错 "Expected 0 type arguments, but got 1"

错误根源

你代码里的核心问题是导入路径错误:你从"vm"模块导入了createContext,但React的createContext属于"react"模块。Node.js内置的vm模块里的createContext函数不支持类型参数,这就是报错的直接原因。

修正步骤

  1. 修正createContext的导入语句,将import { createContext } from "vm";替换为从"react"导入,同时可以合并所有React相关的导入,让代码更简洁
  2. 其余代码的类型定义和逻辑写法都是正确的,无需改动

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:15:02