我需要在makeStyles内部的多个样式中传播通用样式。这适用于我的 jsx,但当我移动到 tsx 时会出错。
const abc = {
fontWeight: 600,
textTransform: 'uppercase',
}
const useStyles = makeStyles(() => ({
abcAdd: {
...abc,
color: '#B25846';
},
}))
如果对象是在 TypeScript 中声明的,请将其类型设置为CSSProperties
import { CSSProperties } from "@material-ui/core/styles/withStyles";
const abc: CSSProperties = {
fontWeight: 600,
textTransform: 'uppercase',
}
或者,如果对象来自 JavaScript,则将其转换为CSSProperties
import { CSSProperties } from "@material-ui/core/styles/withStyles";
import { abc } from "./some/path/to/javascript";
const useStyles = makeStyles(() => ({
abcAdd: {
...abc as CSSProperties,
color: '#B25846',
},
}))
我找到了一个简单的解决方法 - 添加"any"作为回调函数的类型
const abc = {
fontWeight: 600,
textTransform: 'uppercase',
}
const useStyles = makeStyles((): any => ({
abcAdd: {
...abc,
color: '#B25846';
},
}))
当你使用这个类时,用引号来调用它:
const classes = useStyles()
return (
<Box className={classes['abcAdd']}>
)
这种方式对我有用,并且 TS 编译器没有错误。 我敢肯定,可能有更好的解决方案,也许您需要为回调定义一些高级类型。但它需要打字稿的高级知识,我在这方面没有那么丰富的经验。 任何更好的解决方案 - 欢迎!
如果你在那行上使用@ts-ignore
呢?
没有必要在makeStyles中传播JSON。您可能想要传播它可能只有一个原因,因为您想将注释 CSS 保存在一个文件中。
只需为常见的 css 创建一个注释文件:
import {
makeStyles,
} from '@material-ui/core';
const useCommonStyles = makeStyles(() => ({
abcAdd:{ fontWeight: 600,
textTransform: 'uppercase',}
}));
export default useCommonStyles;
并在任何地方像这样使用它
import useCommonStyles from "src/utils/commonStyles";
const commonClasses = useCommonStyles();