在使用StyledComponents和ThemeProvider时,我在获取正确的类型时遇到了问题。
我尝试过这种方法:https://github.com/styled-components/styled-components/issues/1589
到目前为止我的代码:
App.tsx
import * as React from "react";
import "./styles.css";
import theme from "./theme";
import { ThemeProvider } from "styled-components";
import StyledButton from "./StyledButton";
export default function App() {
return (
<ThemeProvider theme={theme}>
<div className="App">
<StyledButton variant="primary">MyButton</StyledButton>
</div>
</ThemeProvider>
);
}
字符串
theme.ts
import "styled-components";
const theme = {
borderRadius: "0.7rem",
color: "yellow"
};
export default theme;
型
StyledButton.tsx
import styled from "styled-components";
interface IButtonProps {
color: string;
backgroundColor: string;
borderRadius?: string;
}
const buttonProps = (props: any): IButtonProps => {
/* defaultValues / primary */
let bp: IButtonProps = {
color: props.theme.color,
backgroundColor: "#2862c3c4"
};
if (props.variant === "primary") {
return bp;
} else if (props.variant === "secondary") {
bp.color = "white";
bp.backgroundColor = "#808080c2";
}
return bp;
};
const StyledButton = styled.button<IButtonProps>`
color: ${props => (props.color ? props.color : buttonProps(props).color)};
background-color: ${props =>
props.backgroundColor
? props.backgroundColor
: buttonProps(props).backgroundColor};
border-radius: ${props => props.theme.borderRadius};
`;
export default StyledButton;
型
styled-components.d.ts
import theme from "./globals/theme";
type CustomTheme = typeof theme;
declare module "styled-components" {
export interface DefaultTheme extends CustomTheme {}
}
型
那么我需要修改什么来摆脱any类型:
const buttonProps = (props: any): IButtonProps
型
以及以下变量的ts警告:
<StyledButton variant="primary">MyButton</StyledButton>
4条答案
按热度按时间blmhpbnm1#
在官方文件中有描述。
在
.d.ts
文件中添加以下内容:字符串
mw3dktmi2#
在src文件夹中,创建一个名为@types的新文件夹,并将您的文件styled.d.ts放在该文件夹中。内容同下。
字符串
它为我工作。
dced5bon3#
像这样将
as const
添加到主题对象中。字符串
q43xntqr4#
由于某种原因,名称
styled.d.ts
不适用于类型定义。确保提供另一个名称,如style-component.d.ts
。