首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少样式组件的className

缺少样式组件的className
EN

Stack Overflow用户
提问于 2019-08-04 22:21:01
回答 1查看 1.4K关注 0票数 3

我已经定义了这样的"Logo“组件:

代码语言:javascript
复制
const Logo = ({ className }: { className: string }) => (
  <Link to="/" className={className}>
    <img src={logo} alt="logo" />
  </Link>
);

它具有通过传递className进行样式设计的公开可能性。

但当我把它和打字稿用在一起时:

代码语言:javascript
复制
const StyledLogo = styled(Logo)`
  margin-left: 4.5rem;
`;

..。在某个地方呈现:

代码语言:javascript
复制
<StyledLogo />

那我就犯了这样的错误:

错误:(33,6) TS2741:属性'className‘在类型'{}’中缺失,但在类型'Pick & Partial>‘、"className">’中是必需的。

如何让类型记录知道我所有的样式组件都将传递这个className属性,并且它将一直在那里?

EN

回答 1

Stack Overflow用户

发布于 2019-08-04 23:22:39

通过执行以下操作,应该可以通过标记className 可选Logo参数来解决这个问题:

代码语言:javascript
复制
/* 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 />

希望这能帮上忙!

更新

或者,为了避免上述可选的className方法,您可以采用以下方法:

代码语言:javascript
复制
/* 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 />

此方法确保TS知道传递给Logo组件的实际支持集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57350584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档