Как расширить определение Typescript темы пользовательского интерфейса с помощью темы выбора пользовательского интерфейса материала

Я пытаюсь расширить тему Material-UI, чтобы включить типизацию Typescript для Material-UI-Pickers для следующих (последних) версий:

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

В нижней части страницы выбора пользовательского интерфейса для материала есть упоминание о том, что тема может быть расширена благодаря расширению Typescript Theme.

Он рекомендует сделать это:

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

Но в интерфейсе материалов override.d.ts файл, Overrides это не интерфейс, а тип (таким образом, он не будет расширяемым таким образом), что заставляет меня думать, что типизации Material-UI кардинально изменились, и что руководство (и наборы) для Material-UI-Pickers устарели.

Любая подсказка о том, как правильно расширить набор текста темы?

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,

Другие вопросы по тегам