我的组件中有一个属性,它应该获得一个有效的CSS属性数组:

interface MyComponentProps {
    cssProperties: (keyof CSSStyleDeclaration)[];
}

const MyComponent = ({ cssProperties }: MyComponentProps) => {
    //
}

问题是,CSSStyleDeclaration将样式存储为属性名称为驼峰大小写的对象.我需要真正的css属性值,连字符.所以是background-color而不是backgroundColor.我知道还有React.CSSProperties个类型,但它也使用驼峰大小写的属性,同时允许无单位的数值.

是否有一种打字类型可以使用原始的、用连字符连接的CSS属性名称?

推荐答案

有这个库csstype,它由MUI、情感和一些其他流行的组件库使用.

它允许你使用hyphen个props

import CSS from "csstype";

interface MyComponentProps {
  cssProperties: (keyof CSS.PropertiesHyphen)[];
}

const MyComponent = ({ cssProperties }: MyComponentProps) => {
  //
}

<MyComponent cssProperties={["color", "background-color"]} />;

Css相关问答推荐

为什么我不能编辑垫按钮填充?

以百分比形式输入的css宽度属性不会生效

可折叠/可展开的数据表行:如何使Shadcn数据表中的可折叠内容全宽?

在Reaction中自定义ANTD日期选取器

如何在 CSS 中使 Flex 容器内的网格响应,而不 destruct 外部 Flex 容器的布局?

CSS 内联 Flex 和段落换行

通过 CSS 中的媒体查询更改站点的页面大小

如何使代码块输出在 quarto revealjs 演示文稿中水平滚动

Mat table - 保留第一列和复选框

zoom 时闪烁的背景滤镜模糊

CSS中的旋转地球

svg 背景图像位置始终在 Internet Explorer 中居中,尽管 background-position: left center;

HTML/CSS 中的单选/复选框对齐

li 中的第二行在 CSS-reset 后的项目符号下开始

CSS3 box-shadow:inset 可以只做一侧或两侧吗?喜欢边界顶部?

如何根据容器大小设置字体大小?

多个和/或嵌套的 bootstrap 容器?

CSS flex,如何在第一行显示一个项目,在下一行显示两个项目

仅使用 CSS 交换 DIV 位置

从 textarea 中删除所有样式(边框、发光)