具有类名的TypeScript:无索引签名

时间:2018-11-02 00:27:58

标签: typescript typescript-typings tslint class-names typescript-types

我正在编写一个React应用,正在使用classnames来帮助我进行样式设计。

我像这样加入我的班级名:

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这是一个字符串?

编辑: 这是我获取课程的方法。我将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;

1 个答案:

答案 0 :(得分:0)

我成功了!

在props接口中,我必须这样定义color

color: "transparent" | "primary";