gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:07 24 4
gpt4 key购买 nike

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

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

我已经实现了一个非常简单的组件,它接受一个 prop,但是 typescript 编译器在使用时抛出以下错误

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>>

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

关于reactjs - 在新的 @material-ui/core 中使用 withStyles 和 Typescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50558671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com