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

修改Material UI v5默认字体时出现ThemeProvider TypeScript错误

解决Material UI字体替换及ThemeProvider类型错误问题

1. 先搞定ThemeProvider的类型错误

这个错误和webpack半毛钱关系都没有,纯粹是ThemeProvider导入错了。

正确的导入方式:
在app.js里,从正确的路径导入ThemeProvider:

import { ThemeProvider } from '@mui/material/styles';
// 或者也可以这么导,效果一样
// import ThemeProvider from '@mui/material/ThemeProvider';

要是之前你误导入了类型(比如写了import type { ThemeProvider } from ...),就会触发这个TS错误——类型不能当组件用,自然没法实例化。

2. 优化Roboto Condensed字体配置

你现在的theme配置有点冗余,还可能导致字体不生效,改一下:

步骤1:保留已做的正确操作

之前执行的npm install @fontsource/roboto-condensed没问题,在app.js顶部导入字体包:

import '@fontsource/roboto-condensed'; // 这个包会自动帮你注入@font-face规则,不用自己写

步骤2:修改theme.ts文件

删掉MuiCssBaseline里多余的@font-face配置,然后把fontFamily写得更稳妥点:

import { createTheme, Theme } from "@mui/material/styles";

const theme: Theme = createTheme({
  typography: {
    fontFamily: '"Roboto Condensed", sans-serif', // 加引号和后备字体,避免特殊字符问题
  },
  components: {
    MuiCssBaseline: {
      styleOverrides: {
        body: {
          fontSize: "3rem",
          color: "purple",
        },
      },
    },
  },
});
export default theme;

步骤3:确认ThemeProvider的使用

确保app.js里正确导入theme和ThemeProvider,然后包裹根组件:

import { ThemeProvider } from '@mui/material/styles';
import theme from './theme'; // 换成你实际的theme.ts路径

// ...其他代码

render(
  <ThemeProvider theme={theme}>
    {/* 你的根组件内容 */}
  </ThemeProvider>
);

3. 验证效果

改完重启项目,TS错误应该会消失,字体也会换成Roboto Condensed。要是字体还是没生效,检查下:

  • @fontsource/roboto-condensed的版本和你的MUI版本是否兼容
  • 浏览器控制台有没有字体加载失败的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:55:54