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

Next.js useContext引入报错:找不到Context.jsx的声明文件

问题原因及解决办法

原因

你在TypeScript项目中引入了.jsx后缀的文件,TypeScript无法自动识别该模块的类型,默认将其标记为any类型;而你的TS配置里大概率开启了noImplicitAny规则(TS默认开启),所以触发了这个类型检查错误。

解决办法

方法一:将文件转为TSX格式(推荐)

把Context.jsx重命名为Context.tsx,并补充类型定义,让TS能正确推断类型:

import React, { createContext, useState, useEffect, useContext } from "react";

// 定义博客数据的类型接口,根据实际返回字段补充
interface Blog {
  _id: string;
  title: string;
  content: string;
  // 其他字段...
}

// 给Context指定类型,初始值设为null
const Context = createContext<Blog[] | null>(null);

const Provider = ({ children }: { children: React.ReactNode }) => {
    const [code, setCode] = useState<Blog[] | null>(null);

    useEffect(() => {
        const fetchBlogs = () => {
            fetch(`https://node-test-mongo.herokuapp.com/api/blog`)
                .then((response) => response.json())
                .then((data) => {
                    setCode(data.blogs)
                })
                .catch((error) => console.log("An error occured"));
        };

        fetchBlogs();
    }, []);

    return <Context.Provider value={code}>{children}</Context.Provider>;
};

export const useCoder = () => useContext(Context);

export default Provider;

方法二:添加类型声明文件

如果不想修改文件后缀,在Context.jsx同目录下创建Context.d.ts文件,手动声明模块类型:

import React from "react";

interface Blog {
  _id: string;
  title: string;
  content: string;
  // 其他字段...
}

declare module "./Context.jsx" {
  const Provider: React.FC<{ children: React.ReactNode }>;
  const useCoder: () => Blog[] | null;
  export default Provider;
  export { useCoder };
}

方法三:临时关闭TS规则(不推荐)

在tsconfig.json里将noImplicitAny设为false,但这会关闭TS对隐式any类型的检查,失去类型安全的优势,不建议长期使用。

内容的提问来源于stack exchange,提问作者user17880509

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 23:39:16