reactjs - Die Eigenschaft 'palette' wird vom DefaultTheme von MaterialUI nicht erkannt, sie funktionierte nicht mehr, sobald Material UI von v4 auf v5 umgestellt wurde
Ich migriere meine App von Material UI v4 auf v5 und stoße auf einige Probleme. Eines davon ist, dass die Eigenschaft 'palette' vom DefaultTheme von Material UI nicht erkannt wird, sobald sie in makeStyles verwendet wird. Diese Komponente funktionierte in v4 einwandfrei, aber nachdem ich den Großteil auf v5 umgestellt habe, zeigt sie mir jetzt einen Fehler und erkennt die Eigenschaft 'palette' nicht. Können Sie bitte einen Blick darauf werfen und mir sagen, wie ich das beheben kann?
So wird es in der Hauptkomponente genannt: import { makeStyles } from '@mui/styles';
const useStyles = makeStyles((theme) => ({
styledButton: {
'&': { color: theme.palette.cerulean },
'&.Mui-selected': {
backgroundColor: theme.palette.aliceBlue,
color: theme.palette.cerulean,
},
'&:hover': {
backgroundColor: 'rgba(227,245,255, 0.5) !important',
},
},
}));
Wenn ich über dem 'palette' den Mauszeiger halte, gibt TS einen Kommentar wie: Eigenschaft 'palette' existiert nicht im Typ 'DefaultTheme'.
Thema wird in der App wie folgt genannt:
import { ThemeProvider } from '@mui/styles';
import { MainTheme } from '@nevomo/utilities';
export const App: FC = () => (
<StyledEngineProvider injectFirst>
<ThemeProvider theme={MainTheme}>
<SCThemeProvider theme={MainTheme}>
<CssBaseline />
<Router>
<AuthContextProvider>
<Notifications />
<RoutingManager />
</AuthContextProvider>
</Router>
</SCThemeProvider>
</ThemeProvider>
</StyledEngineProvider>
);
Hauptthema sieht so aus:
import { createTheme, Theme } from '@mui/material/styles';
import { paletteColors } from './main-theme-colors';
export const MainTheme: Theme = createTheme({
spacing: (factor: number) => `${factor * 1}rem`,
palette: {
primary: {
main: paletteColors.primary.main,
},
secondary: {
main: paletteColors.secondary.main,
},
error: {
main: paletteColors.error.main,
},
white: '#FFFFFF',
lighterBlue: '#EFFBFF',
lightBlue: '#DEF7FF',
celeste: '#00A7E1',
blue: '#0027d3',
navy: '#083D77',
greenSalad: '#4DA167',
red: '#d32f2f',
pink: '#FFE3E3',
lightPink: '#ECD6E6',
darkPink: '#700353',
black: '#000000',
orange: '#FD5C01',
darkRed: '#AD160B',
aliceBlue: '#E3F5FF',
cerulean: '#007CBA',
},
});
Vielen Dank!
Antwort #1
Der OP hat sein Problem gelöst, aber ich lasse dies aus der MUI-Migrationsdokumentation für zukünftige Personen, die auf dasselbe Problem stoßen, hier:
[Typen] Eigenschaft "palette", "spacing" existiert nicht im Typ 'DefaultTheme'
Da
makeStylesjetzt aus dem Paket@mui/stylesexportiert wird, das nichts überThemeim Core-Paket weiß, müssen Sie zur Behebung dasDefaultTheme(leeres Objekt) in@mui/stylesmitThemeaus dem Core erweitern.TypeScript-Projekt
Fügen Sie diesen Ausschnitt in Ihre Theme-Datei ein:
// it could be your App.tsx file or theme file that is included in your tsconfig.json
import { Theme } from '@mui/material/styles';
declare module '@mui/styles/defaultTheme' {
// eslint-disable-next-line @typescript-eslint/no-empty-interface (remove this line if you don't have the rule enabled)
interface DefaultTheme extends Theme {}
}
Javascript-Projekt
Wenn Ihre IDE (z. B. VSCode) in der Lage ist, Typen aus der
d.ts-Datei abzuleiten, erstellen Sieindex.d.tsin Ihrem src-Ordner mit diesem Snippet:
// index.d.ts
declare module "@mui/private-theming" {
import type { Theme } from "@mui/material/styles";
interface DefaultTheme extends Theme {}
}
Antwort #2
Die aktuelle MUI-Version behebt den DefaultTheme-Typfehler auf diese Weise—
// global.d.ts
import { Theme } from '@mui/material/styles';
declare module '@mui/system' {
interface DefaultTheme extends Theme {}
}
