Javascript 样式化组件缺少类名称

Javascript 样式化组件缺少类名称,javascript,reactjs,styled-components,Javascript,Reactjs,Styled Components,我已定义了此类“徽标”组件: const Logo = ({ className }: { className: string }) => ( <Link to="/" className={className}> <img src={logo} alt="logo" /> </Link> ); 。。。渲染中的某处: <StyledLogo /> 那么我就犯了这样的错误: 错误:(33,6)TS2741:类型“{}”中

我已定义了此类“徽标”组件:

const Logo = ({ className }: { className: string }) => (
  <Link to="/" className={className}>
    <img src={logo} alt="logo" />
  </Link>
);
。。。渲染中的某处:

<StyledLogo />

那么我就犯了这样的错误:

错误:(33,6)TS2741:类型“{}”中缺少属性“className”,但 “拾取”类型中需要& 部分>,“类名称”>”


如何让typescript知道我的所有样式化组件都将传递此className属性,并且它将始终存在?

通过执行以下操作标记
徽标的
className
参数,应该可以解决此问题:

/* Add ? after className */
const Logo = ({ className }: { className?: string }) => (
  <Link to="/" className={className}>
    <img src={logo} alt="logo" />
  </Link>
);

const StyledLogo = styled(Logo)`
  margin-left: 4.5rem;
`;

/* No ts error reported now */
<StyledLogo />

此方法确保TS知道实际道具集被传递到
Logo
组件。

Ah,此帮助。谢谢,但该解决方案并没有改变这样一个事实,即typescript不知道样式(徽标)隐式传递类名属性。@PatrykJanik很抱歉延迟回复您-刚刚更新了答案,希望我正确解释了您的反馈:)谢谢您的另一个回复。但这个解决方案不是通用的。这意味着我需要“包装”每个styled()组件,以便告诉typescript一些我一直知道的事情:/
/* Add ? after className */
const Logo = ({ className }: { className?: string }) => (
  <Link to="/" className={className}>
    <img src={logo} alt="logo" />
  </Link>
);

const StyledLogo = styled(Logo)`
  margin-left: 4.5rem;
`;

/* No ts error reported now */
<StyledLogo />
/* Define type to minimise verbosity */
type LogoProps = { className: string };

/* Define strongly typed Logo function with defined type */
const Logo = (props: LogoProps) => (
  <Link to="/" className={props.className}>
    <img src={"logo"} alt="logo" />
  </Link>
);

/* TS explicitly aware of prop set being passed to Logo via type */
export const StyledLogo = styled((props: LogoProps) => <Logo {...props} />)`
  margin-left: 4.5rem;
`;

 /* Usage */
 <StyledLogo />