在新的 @material-ui/core 中使用 withStyles 和 Typescript

2024-02-16

我正在尝试将一些使用material-ui@next的旧Typescript更新为新的@material-ui/core。

Typescript Version: 2.8.3
@material-ui/core: 1.1.0

我已经实现了一个非常简单的组件,它需要一个道具,但是打字稿编译器在使用它时会抛出以下错误

src/App.tsx(21,26): error TS2322: Type '{ classes: true; imageUrl: string; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Placeholder> & Readonly<{ children?: ReactNode; }>...'.
  Type '{ classes: true; imageUrl: string; }' is not assignable to type 'Readonly<PROPS_WITH_STYLES>'.
    Types of property 'classes' are incompatible.
      Type 'true' is not assignable to type 'Record<"root", string>'.

这是组件 Placeholder.tsx

import * as React from "react";
import { StyleRulesCallback, WithStyles, withStyles, StyledComponentProps } from "@material-ui/core";

export interface IPlaceholderProps {
    imageUrl: string;
}

export const STYLES: StyleRulesCallback<"root"> = theme => ({
    root: {
        display: "flex",
        justifyContent: "center",
        alignItems: "center"
    }
});

export type PROPS_WITH_STYLES = IPlaceholderProps & WithStyles<"root">;

export class Placeholder extends React.Component<PROPS_WITH_STYLES, {}> {
    render(){
        return <div className={this.props.classes.root}>
            <img src={this.props.imageUrl}/>
        </div>;
    }
}

export default withStyles(STYLES, { withTheme: true })<PROPS_WITH_STYLES>(Placeholder);

我在尝试为我的样式创建类型时也遇到了一些问题,因此如果 Material-ui 中的 WithStyles 不起作用,您可以如何正确键入样式

const styles = (props) => ({
  container: {
    display: 'flex',
  }      
})
 

type Props = {
  blabla: string;
  classes: Record<keyof ReturnType<typeof styles>, string>
}

您可能还想为此创建一个实用程序类型

const styles = (props) => ({
  container: {
    display: 'flex',
  }       
})
 

type MaterialStyle<S> = { 
  classes: Record<keyof S, string>
}


type Props = {
  blabla: string;
} & MaterialStyle<ReturnType<typeof styles>>

如果您找到更好、更短的方法来做同样的事情,请告诉我:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在新的 @material-ui/core 中使用 withStyles 和 Typescript 的相关文章

  • 当没有结果返回时,如何防止 Angular 异步管道频繁进行服务器调用?

    我正在使用async通过管道传入 ngFor 来观察 Observable Observable 是由访问我的服务器的服务创建的 并且在枚举 ngFor 循环时的加载时间 该服务正确地调用服务器 现在对于我不明白的部分 当任何结果返回时 一
  • 使用 TypeScript 3 项目引用时出现“找不到模块”错误

    我想得到TypeScript 3 的项目参考正在工作 但很难从引用的项目中导入函数 我有一个ProjectA引用Shared 这是文件结构 ProjectA src person ts tsconfig json Shared src ut
  • 具有多种布局的 React Router v4

    我想在我的公共布局中渲染一些路线 并在我的私人布局中渲染一些其他路线 有没有一种干净的方法可以做到这一点 显然不起作用的示例 但我希望大致解释我正在寻找的内容
  • React:在哪里扩展对象原型

    我使用创建了一个纯 React 应用程序创建反应应用程序 https github com facebookincubator create react app 我想延长String类并在一个或多个组件中使用它 例如 String prot
  • useState 以 `new` 关键字作为参数

    我正在构建一个单独的服务来处理复杂的事情 该服务是一个类 只是为了测试建议 我在一个内部模拟useState 重点是我忘记了一个console log在构造函数内部 并意识到类构造函数在组件重新渲染时被调用多次 这种行为不会导致意外的行为或
  • 为什么使用 getDerivedStateFromProps 而不是 componentDidUpdate?

    正如读到的这个 React Github 问题 https github com facebook react issues 12310我看到越来越多的 的代价render 相对较小 在 React 16 3 中 我想知道为什么要使用新的
  • Typescript 和 React 使用空类型数组设置初始状态

    假设我有以下片段 interface State alarms Alarm export default class Alarms extends React Component lt State gt state alarms 因为我想设
  • Redux 状态 - 最大推荐大小

    我正在构建一个项目管理应用程序 但我仍然在努力解决一个问题 在 Redux 状态中存储什么以及 按需 加载什么 Redux 状态是否有已知的 最大推荐大小 几十千字节 几百千字节 兆字节单位 请记住 归根结底 Redux 只是 如何 将信息
  • 如何使用 Jest 测试 React 渲染的异步数据?

    我使用 React 进行渲染 使用 Jest Jasmine 进行测试 我用旧的 Jest Jasmine 编写了测试waitsFor and runs但这些现在在 Jasmine 2 中已经消失了 我不知道如何用新的替换done asyn
  • 如何在 React 中将图像加载到画布上?

    如何在 React 中将图像上传到画布的整个宽度 高度 例如 class PlanPage extends Component constructor props super props componentWillMount this se
  • 将 useRef 挂钩传递给 ref 属性的正确方法

    我不确定如何更明确地提出这个问题 但它是关于值传递 and 引用传递反应中的情况 还有胡克斯 我正在使用 gsap 来制作 div 滑入和滑出的动画 这是其上下文 但我猜测 ref 的用途并不重要 因此 这工作得很好 尽管这是一种更典型的类
  • 设计 React Hooks 可防止 React-hooks/exhaustive-deps 警告

    我正在设计一个钩子 仅当钩子依赖项发生变化时才获取数据 它按预期工作但我收到了 linter 警告 React Hook useEffect was passed a dependency list that is not an array
  • RxJ 从 observable 中获取价值

    在组件中 singleEvent Observable
  • 枚举类型在打字稿中给出双数组

    我想从枚举数据类型创建一个下拉列表 但是当我尝试将枚举更改为具有名称和值的对象时 枚举数组返回枚举成员的两倍 使用函数这个帖子 https stackoverflow com questions 18111657 how does one
  • Passport-local-mongoose:createStrategy 不是函数/authenticate 不是函数

    我正在构建这个启动项目 https github com cj wang mean start tree 424e6056e33bb16874ae808daf3780d53309296f并尝试添加用户登录护照本地猫鼬 https www n
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • Firebase 托管部署失败

    Running firebase deploy在给我一个超时错误之前会运行几分钟Error ESOCKETTIMEDOUT 我之前已经成功部署了多次 除了项目的前端 用 React 编写 之外 没有更改任何内容 我有一个单独的文件夹 其中包
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中

随机推荐

  • TFS:不允许将工作项类型添加为链接

    我刚刚完成生成自定义WITH 工作项类型 CRM 案例 我在需求类别的类别子级中添加相关信息
  • 厨师刀命令 404 未找到

    我正在尝试使用 Chef 我按照他们提供的所有步骤 使用您的硬件安装和配置 Chef 服务器 我已从工作站运行以下命令 knife SSL check Output 连接到主机 my server 443已成功验证来自 my server
  • 如何使用@DbRef注释引用GridFSFile(spring data mongodb)

    我有一个春天 Documentobject Profile 我想像这样引用 GridFSFile DbRef private GridFSFile file 该文件被写入另一个集合类型GridFS 我总是有一个java lang Stack
  • GridView 自动将行高设置为最高的网格项

    标题是我想要实现的目标的简化版本 一个 GridView 它根据我提供的原型网格项自动设置行高 原型项目是最高的可能项目 例如 如果网格项目包含文本 则原型将包含最长的可能文本 一种可能的解决方法是使用 ListView 其中每一行都包含在
  • ctypes 指向 numpy 数组中间的指针

    我知道如何获取指向 numpy 数组开头的 ctypes 指针 a np arange 10000 dtype np double p a ctypes data as POINTER c double p contents c doubl
  • keras 规范化轴参数有什么作用?

    我是深度学习的初学者 正在 keras 中处理 mnist 数据集 我使用归一化作为 tf keras utils normalize x train axis 1 我不明白轴参数是什么意思 你能帮我解决这个问题吗 Normalize 函数
  • 如何使用 pyspark 计算 apache Spark 数据帧的大小?

    有没有办法使用 pyspark 计算 Apache Spark 数据帧的大小 以字节为单位 为什么不缓存 df 然后在存储下查看 Spark UI 并将单位转换为字节 df cache
  • Google Drive Api - 使用实体框架自定义 IDataStore

    我实现了我的自定义IDataStore这样我就可以存储最终用户令牌 on my database而不是默认的实现 它保存在文件系统在 AppData 内 public class GoogleIDataStore IDataStore pu
  • 在没有脚本标签的情况下执行 XSS JavaScript

    我正在学习 XSS 出于道德目的 我想知道如何在不使用
  • AngularJS:使用 ng-repeat 保留插入顺序

    我正在使用 ng repeat 实现自动完成系统 基本上 我有一个提供 ng repeat 的对象数组 我注意到 当我将新内容插入数组时 插入顺序不会保留 例如 广告订单 A B C ng 重复渲染顺序 甲 丙 乙 A B C 中的每一个都
  • 如何在 LINQ 中选择所有字段以及一些新字段?

    我收到了 RDLC 报告 SQL DB 中存储的日期格式是格鲁吉亚语 我想在报告中将日期显示为波斯语 使用 Linq 我想选择数据库的所有字段以及一些用作波斯日期字段的新字段 我使用以下语法 var invoices from invoic
  • 如何用Vagrant处理Mysql、网站源等数据?

    如何使用 Vagrant 处理 Mysql 网站源等数据 作为一名程序员 我喜欢能够轻松设置开发环境 因此 我创建了一个流浪盒子并为其配置了木偶 但我问自己 盒子中的数据怎么样 如果我需要销毁盒子并重新创建它会怎样 我的所有数据都将被删除
  • Chrome 中的引导模式问题

    我的 asp net mvc 代码中有一个引导模式 它在运行时进行主体绑定 第一次我单击某些按钮并且模态工作良好 通过 jquery ajax 从控制器返回主体 然后必须动态改变模型的主体 它也很好用 通过 jquery Ajax 和 js
  • 如何实现以下C++输出格式?

    我希望按照以下规则打印出 double 1 No scietific notation 2 Maximum decimal point is 3 3 No trailing 0 例如 0 01 formated to 0 01 2 1234
  • 在 Android 上使用 firebase 发送好友请求

    我正在从 Parse 迁移到 Firebase 我的 sendRequest 函数执行以下任务 假设user1向user2发送请求 检查用户名是否存在 检查user1是否尚未向user2发送请求 检查user1和user2是否还不是朋友 一
  • Jenkins Pipeline - 阅读前一阶段日志

    考虑一个有两个阶段的 Jenkins Pipeline Stage A then Stage B 在阶段 B 中 是否可以解析阶段 A 的日志中的某些特定文本 Use tee将输出拆分为标准输出和文件 接下来解析文件中的文本 STAGE A
  • 如何使用Microsoft Graph Client SDK(C#)重置密码?

    用户如何使用 Microsoft Graph 客户端重置密码 我无法找到正确的方法来做到这一点 谢谢 汤姆关于委托范围的说法是正确的Directory AccessAsUser All允许登录用户更改密码 标准User ReadWrite可
  • 将字典列表转换为 tf 数据集

    我有一本已经完全预处理的字典 可以输入到 BERT 模型中 然而 我很难将其放入 tf dataset 中 这就是我的数据集的一个元素 print dataset 0 input ids
  • Tensorflow:tf.nn.separable_conv2d 是做什么的?

    我不太确定 tf nn separable conv2d 到底做了什么 看来pointwise filter是生成下一层的一个像素时针对不同特征的缩放因子 但我不确定我的解释是否正确 这个方法有什么参考吗 有什么好处 tf nn separ
  • 在新的 @material-ui/core 中使用 withStyles 和 Typescript

    我正在尝试将一些使用material ui next的旧Typescript更新为新的 material ui core Typescript Version 2 8 3 material ui core 1 1 0 我已经实现了一个非常简