Я пишу приложение React и использую имена классов , чтобы помочь с моим стилем.
Я присоединяюсь к своим именам классов вот так:
const appBarClasses = classNames({
[classes.appBar]: true,
[classes[color]]: color,
[classes.fixed]: fixed
});
В строке, где я установил цвет TypeScript жалуется:
[ts] Element implicitly has an 'any' type because type 'Record<"fixed" | "appBar" | "primary" | "transparent", string>' has no index signature.
Я пробовал бесчисленные варианты с as
или : string
, но не смог заставить его работать. Как мне сказать TSLint, что это строка?
Edit:
Вот как я получаю классы. Я использую Material-UI для своих компонентов и использую функцию WithStyles .
import withStyles, { WithStyles } from "@material-ui/core/styles/withStyles";
import createStyles from "@material-ui/core/styles/createStyles";
export interface Props extends WithStyles<typeof styles> {
brand: string;
fixed: boolean;
changeColorOnScroll: { height: number; color: string };
color: string;
}
styles
- объект, созданный с помощью createStyles
.
Вот как styles
выглядит:
import createStyles from "@material-ui/core/styles/createStyles";
import { primaryColor } from "../../styles";
const navBarStyle = createStyles({
appBar: {
alignItems: "center",
backgroundColor: "#fff",
border: "0",
borderRadius: "3px",
boxShadow:
"0 4px 18px 0px rgba(0, 0, 0, 0.12), 0 7px 10px -5px rgba(0, 0, 0, 0.15)",
color: "#555",
display: "flex",
flexFlow: "row nowrap",
justifyContent: "flex-start",
marginBottom: "20px",
padding: "0.625rem 0",
position: "relative",
transition: "all 150ms ease 0s",
width: "100%"
},
fixed: {
position: "fixed"
},
primary: {
backgroundColor: primaryColor,
boxShadow:
"0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px rgba(156, 39, 176, 0.46)",
color: "#FFFFFF"
},
transparent: {
backgroundColor: "transparent !important",
boxShadow: "none",
color: "#FFFFFF",
paddingTop: "25px"
}
});
export default navBarStyle;