在 react + typescript 项目中,若想复用 html 属性选择器(如 `[color="red"]`)的语义化写法,需通过类型扩展让自定义组件支持原生 dom 属性,同时保持类型安全与样式可维护性。
在纯 HTML/CSS 中,我们可以直接使用
自定义属性(如 color="red")配合属性选择器 div[color="red"] 实现样式映射。但在 React JSX 中,
✅ 正确解法:类型合并(Intersection Type) + 展开 props
通过将业务专属属性(如 color: "red" | "yellow")与原生 HTML 属性类型 React.HTMLAttributes
import React, { FC } from 'react';
type ColoredProps = {
color: 'red' | 'yellow';
} & React.HTMLAttributes;
const Colored: FC = ({ color, ...props }) => (
{color}
); 这样调用完全合法且类型安全:
alert('Yellow!')} />
⚠️ 注意事项:
总结:技术上可通过类型交集实现属性选择器兼容,但工程实践中应优先选择 className 或 style 方案——它们更契合 React 的声明式范式、具备更好的可维护性与生态兼容性。