我正在尝试Box
在一个新项目上制作一个通用的反应组件。这将是所有其他组件的基础。我使用 styled-system、emotion 和最终的 theme-ui 来处理我所有组件的主题和样式。
我的根Box
组件如下所示:
import styled from '@emotion/styled';
import {
compose,
space,
layout,
flexbox,
border,
position,
color,
SpaceProps,
ColorProps,
LayoutProps,
FlexboxProps,
BorderProps,
PositionProps,
} from 'styled-system';
export type BoxProps = SpaceProps &
ColorProps &
LayoutProps &
FlexboxProps &
BorderProps &
PositionProps;
export const Box = styled.div<BoxProps>(
{
boxSizing: 'border-box',
minWidth: 0,
},
compose(space, color, layout, flexbox, border, position)
);
我正在使用样式函数以及样式系统中的相关类型来创建一个接受空间、颜色、布局、弹性框、边框和位置道具的 Box 组件。
我得到的错误只发生在color
道具上。一旦我删除它,我就不会收到任何错误。
TS错误是:
Type 'BoxProps' does not satisfy the constraint 'Pick<Pick<DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "color">, "color">'.
Types of property 'color' are incompatible.
Type 'string | number | symbol | (string | number | symbol | null)[] | { [x: string]: string | number | symbol | undefined; [x: number]: string | number | symbol | undefined; } | null | undefined' is not assignable to type 'string | undefined'.
Type 'null' is not assignable to type 'string | undefined'.ts(2344)
这似乎只是从样式组件转移到情感时的一个问题,所以我不确定我是否缺少正确利用情感类型的东西?