使用material-ui@next 和 typescript 扩展主题

2024-06-06

创建我的主题时material-ui我添加了两个新的调色板选项,为我提供了更好的明暗范围。我已经延长了Theme键入以表明这一点

import {Theme} from "material-ui/styles";
import {Palette} from "material-ui/styles/createPalette";

export interface ExtendedTheme extends Theme {
    palette: ExtendedPalette
}

export interface ExtendedPalette extends Palette {
    light: Color,
    dark: Color,
}

当我尝试在中使用这些附加选项时出现问题WithStyles渲染助手

const styles = (theme : ExtendedTheme) => ({ root: {color: theme.light['100'] }});

export interface MyProps {classes: {[index: string] : string}};
const MyComponent = (props : MyProps) => {...};

// Type ExtendedTheme is not assignable to Theme
export default withStyles(styles : StyleRulesCallback)(MyComponent);

从功能上讲,我的代码在纯 JavaScript 中运行良好,但由于类型不同,它会引发错误。 Material-ui 的类型期望为Theme作为样式回调函数的唯一参数:

export type StyleRulesCallback<ClassKey extends string = string> = (theme: Theme) => StyleRules<ClassKey>;

我认为扩展接口将以多态方式工作,以便ExtendedTheme将实施Theme


该问题可以使用以下方法解决模块增强 https://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation:

declare module '@material-ui/core' {
  interface Theme {
    colors: {
      success: {
        dark: string,
        light: string,
      }
    }
  }
}


此外,您可以在 App 组件中声明该模块,并将子组件包装在ThemeProvider:

import { createMuiTheme, ThemeProvider, colors, ThemeOptions } from '@material-ui/core';

declare module '@material-ui/core' {
  interface Theme {
    colors: {
      success: {
        dark: string,
        light: string,
      }
    }
  }
}

const App = () => {
  const theme = createMuiTheme({
    colors: {
      success: {
        dark: colors.green[600],
        light: colors.green[300],
      },
    } as ThemeOptions,
  });

  return (
    <ThemeProvider theme={theme}>
     <a href="https://material-ui.com/customization/theming/">Theming</a>
    </ThemeProvider>
  )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用material-ui@next 和 typescript 扩展主题 的相关文章

随机推荐

  • 未捕获的引用错误:i 未定义

    我正在尝试在我的数组上创建一个 for 循环 var lists a b c d JS for i 0 i lt lists length i console log lists i sa report btn lists i click
  • MIPS 汇编不支持“.set noat”吗?

    目前 我正在学习GNU as 并在 info as 中找到了很多有用的信息 我发现 set noat 在MIPS指定的代码中使用 但是当在 info as 中搜索该指令时 我在节点 alpha指令 中找到了它的解释 但在 MIPS Depe
  • 如何获取在记事本中打开的文件的文件名和路径?

    是否可以获取在记事本中打开的文件的名称和路径 我已经有了 Notepad exe 的 ProcessId 谢谢 纳夫尼特 它是标题栏的一部分 所以需要获取窗口句柄 然后调用Win API函数GetWindowText 这可能就是您想要的 使
  • C++长双精度打印所有数字

    关于我的问题 我在这里看到了一篇文章 但不明白 因为我是 C 新手 我编写了一个小脚本 它从用户那里获取一个数字 然后脚本打印出输入数字的阶乘 一旦我输入了像 30 这样的更大的数字 脚本就不会打印出所有的数字 输出就像 2 6525285
  • 转发声明模板类的 typedef [重复]

    这个问题在这里已经有答案了 我知道 typedef 不能在 C 中前向声明 但我想知道以下问题的最佳解决方案是什么 我有一个头文件声明MyClass像这样 include
  • 无法从本地文件夹运行 Jquery

    你好 我是网络开发新手 我需要与JQuery 即使我已经成功尝试过一个jquery但仅在将文件复制到我的在线 ftp 文件夹后 我完全无法从本地文件夹运行它 请解释一下 如何我可以测试一些新脚本吗 进行额外的练习将文件复制到 ftp 文件夹
  • 如何获取wordpress中文件的本地路径

    由于在wordpress中 上传的文件 图像以3种不同的大小存储 从而占用内存 我有一个代码可以根据给定图像的 URL 来调整图像的大小 调整大小的代码是 img wp get image editor image url if is wp
  • 如何创建轮播ViewPager?

    我想做的只是 Android 中的水平轮播 如果我有 3 个屏幕 A B 和 C 那么我希望我的 ViewPager 允许我像这样移动 A B B C C A GTalk for Android 的对话可以这样切换 三星的主屏幕和应用程序屏
  • 通过 VB.NET 和 C# 中的 Ref 参数

    我有与传递参数 byRef 相关的问题 我有基于 VB NET 的类库 其中一些函数是使用 byref 参数类型定义的 这些参数是父类对象 当我尝试调用此函数并在 byref 参数中传递子类对象时 它在 VB NET 中工作 但我无法在 C
  • 如何使用 PDFMiner 获取 PDF 中文本的位置? [复制]

    这个问题在这里已经有答案了 PDFMiner 的文档说 PDFMiner 允许获取页面中文本的确切位置 但是 我一直无法找到如何做到这一点 PDFMiner 的 文档 相当稀疏 所以我不明白如何做到这一点 您正在寻找bbox每个布局对象上的
  • 特定远程分支名称的 Git 列表

    如何获取某些远程源分支的所有名称 我从 remote list选项 但变得多余origin HEAD gt origin master来自另一个源的消息和分支 gt git branch remote list origin HEAD gt
  • 如何以最佳方式计算 python 列表中的元素数量

    这几乎是同一个问题here https stackoverflow com questions 3710976 counting unique elements in a list 除了我要询问排序结果的最有效解决方案 我有一个列表 大约
  • 减少通过管道传输至 Emacs

    当查看 Less 的管道输出时 有时我希望能够在 Emacs 中查看它 以便获得语法突出显示并使用 emacs 命令进行搜索 标记 复制等 我看到 Less 有一个v可用于打开当前查看的文件的命令 EDITOR 不幸的是 这在查看管道输入时
  • 选择单选按钮来更改状态

    我如何设置input type radio 这样状态值就会根据用户的选择而改变 在这种情况下 我想要按钮name 1 成为默认选择的按钮 但如果按钮name 2 由用户选择 某些状态值应该改变 div div
  • 编译器是否允许优化堆内存分配?

    考虑以下使用以下简单代码new 我知道没有delete 但这与这个问题无关 int main int mem new int 100 return 0 编译器是否允许优化new call 在我的研究中 g 5 2 0 https gcc g
  • 无法从 DenseVariational 获得合理的结果

    我正在尝试使用以下大小的数据集 正弦曲线 进行回归问题500 首先 我尝试使用 2 个密集层 每个层有 10 个单元 model tf keras Sequential tf keras layers Dense 10 activation
  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • jQuery 日期选择器在 AJAX 之后不持久

    所以我使用 jQuery 日期选择器 它运行良好 我正在使用 AJAX 来获取一些内容 显然当应用这个新内容时 绑定会丢失 我上周了解到这一点 https stackoverflow com questions 2773573 jquery
  • 根据模板参数的模板函数名称

    我一直在寻找与我的问题相关的示例 但仍然找不到解决方案 我发现的最接近的是 模板函数作为模板参数 https stackoverflow com questions 4697180 template function as a templa
  • 使用material-ui@next 和 typescript 扩展主题

    创建我的主题时material ui我添加了两个新的调色板选项 为我提供了更好的明暗范围 我已经延长了Theme键入以表明这一点 import Theme from material ui styles import Palette fro