reactjs - 如何键入扩展样式组件?
问题描述
Typescript@2.8.1 , styled-components@2.4.0
我需要有一个基本样式组件,.extend()
用于创建类似的新组件,以避免代码重复。
我想出了以下不会引发任何错误的代码:
export interface Aprops {
icon?: string;
}
export const A = styled<Aprops, 'div'>('div')`
padding: ${(props) => (props.icon ? '10px' : '4px')};
`;
export interface Bprops {
darkBackground?: boolean;
}
export const B = A.extend`
background-color: ${(props: Bprops) =>
props.darkBackground ? 'grey' : 'white'};
`;
function test() {
return (
<React.Fragment>
<A icon="str1" />
<B icon="str2" darkBackground />
</React.Fragment>
);
}
有没有办法export const B = A.extend
用Bprops
在这个级别上指定的属性重写行,就像我们在这里:export const A = styled<Aprops, 'div'>('div')
?
就像,所以我不需要在组件的 declaratino 中需要的任何地方export const B = styled<Bprops & Aprops>(A)
复制此代码。(props: Bprops)
B
解决方案
似乎我找到了解决方案:
export const B = styled<Aprops & Bprops>(A)`
background-color: ${props =>
props.darkBackground ? 'grey' : 'white'};
`;
推荐阅读
- c++ - 基准测试时有没有办法模拟缓存局部性?
- python - 我的数组中只有 1 项被使用(应该全部使用)
- xamarin.forms - Xamarin.Forms 中的列布局
- xml - 使用 xmlstarlet 将 XML 转换为 CSV 没有成功
- python-3.x - 实时更新不同python进程中的DataFrame
- powershell - 从 Powershell 中的文本文件中提取响应的困难
- java - 将日期字符串转换为整数数组
- excel - 如何使用 getElement 检索标题
- python - 按行将 PDF 拆分为图像(OCR 模型训练)
- c - 在 glibc lockf.c 函数中调试 segfault - 如何查看 lockf.c 的源代码