【问题标题】:How to extend Material UI 3 theme Typescript definition with the Material UI pickers theme如何使用 Material UI 选择器主题扩展 Material UI 3 主题 Typescript 定义
【发布时间】:2019-07-15 20:27:54
【问题描述】:

我尝试扩展 Material-UI 主题以合并 Material-UI-PickersTypescript 类型,用于以下(最新)版本:

"@material-ui/core": "^3.9.2",
"material-ui-pickers": "^2.2.1",

Material UI picker 页面底部有提及,说明主题可以通过Typescript Theme augmentation 进行扩充。

建议这样做:

declare module '@material-ui/core/styles/overrides' {
    import { MuiPickersOverrides } from 'material-ui-pickers/typings/overrides'
    export interface Overrides extends MuiPickersOverrides { }
}

但是在 Material UI override.d.ts 文件中,Overrides 不是 interface 而是 type(所以它不会可以通过这种方式进行扩展),这让我认为 Material-UI 类型发生了巨大变化,并且 Material-UI-Pickers 指南(和类型)已经过时了。 p>

关于如何正确扩展主题类型的任何线索?

【问题讨论】:

  • 你试过这种方法吗?如果是这样,您看到了什么错误?
  • @epsilon 当然我试过了。它抱怨Overrides 已经存在。

标签: typescript material-ui themes


【解决方案1】:

找到了解决办法。 实际上,MuiPickers 使用 属性名称 -> 样式规则 映射,而最新版本的 Material UI 使用 属性名称 ->类名 映射。

创建包含以下内容的overrides-mui.d.ts 文件可以解决问题。

import { Overrides } from "@material-ui/core/styles/overrides";
import { MuiPickersOverrides } from 'material-ui-pickers/typings/overrides'

type overridesNameToClassKey = { [P in keyof MuiPickersOverrides]: keyof 
MuiPickersOverrides[P] }

declare module "@material-ui/core/styles/overrides" {
    export interface ComponentNameToClassKey extends overridesNameToClassKey { }
}

只有&$selected等样式选择器存在问题。

【讨论】:

  • 这似乎对我不起作用,并且 TS 抱怨 Object literal may only specify known properties, and 'MuiPickersBasePicker' does not exist in type 'Overrides'。我在导出createTheme()theme.ts 文件中声明了该模块。 “@material-ui/core”:“^4.12.3”,“@material-ui/pickers”:“^3.3.10”。知道有什么问题吗?
  • 确实,这个答案与 Material-UI 3.x 和 pickers 2.x 有关。它仍然适用于 MUI 4,但适用于选择器 2.x。我会尝试升级它们,看看效果如何。
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 2020-08-22
相关资源
最近更新 更多