Typescript总是抱怨调色板中缺少某些属性。如果我添加//@ts-ignore
,我的应用程序就能正常工作,但显然我想避免这种情况。我是Typescript的新手,以下是我尝试过的。
import createMuiTheme, { ThemeOptions, Theme } from '@material-ui/core/styles/createMuiTheme';
import { PaletteOptions } from '@material-ui/core/styles/createPalette';
interface IPaletteOptions extends PaletteOptions {
chip: {
color: string,
expandIcon: {
background: string,
color: string,
},
},
}
interface ITheme extends Theme {
palette: IPaletteOptions,
}
const theme: ITheme = createMuiTheme({
typography: {
fontWeightMedium: 600,
fontFamily: ['Open Sans', 'Arial', 'sans-serif'].join(','),
},
palette: {
primary: {
main: '#43C099',
},
secondary: {
main: '#7AF3CA',
},
chip: {
color: '#C2C3C6',
expandIcon: {
background: '#808183',
color: '#FFFFFF',
},
},
},
} as ThemeOptions);
这将引发一个错误,
Type 'Theme' is not assignable to type 'ITheme'.
Types of property 'palette' are incompatible.
Property 'chip' is missing in type 'Palette' but required in type 'IPaletteOptions
这对我来说是一个令人困惑的错误,因为我在任何地方都没有使用Palette
类型。
如何在此处正确扩展调色板?
3条答案
按热度按时间tp5buhyn1#
这可以通过模块扩充更容易地解决:
MUI第5版
material-ui.d.ts
MUI第4版
material-ui.d.ts
vmpqdwk32#
溶液
参考
如果我们看一下createMuiTheme.d.ts
我们会发现
Theme
和ThemeOptions
扮演着不同的角色。zmeyuzjn3#
在React typescript中,当在子组件中使用主题时,必须声明变量是ThemeOptions的类型。