【发布时间】:2021-04-20 17:26:36
【问题描述】:
我有一个 monorepo,其中包含一个由样式化组件组成的设计系统。在这个设计系统中,我有一个 Heading 组件,它采用“level”道具来调整标题的 CSS。
标题
export interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
level: 'colossus' | 'uber' | 'hero' | '1' | '2' | '3' | '4' | '5'
}
export const Heading: React.FC<HeadingProps> = ({ level = '1', children, ...rest }) => {
return (
<HeadingStyled level={level} {...rest}>
{children}
</HeadingStyled>
)
}
用法
要使用这个 Heading 组件,我只需将 level 传递给它以设置样式,并传递 as 属性来调整呈现的 HTML。
<Heading as="h2" level="2">
Header 2
</Heading>
问题
当我使用这个组件时,我在as 道具上遇到打字错误
Type '{ children: string; as: string; level: "2"; }' is not assignable to type 'IntrinsicAttributes & HeadingProps & { children?: ReactNode; }'.
Property 'as' does not exist on type 'IntrinsicAttributes & HeadingProps & { children?: ReactNode; }'.
我试过了:
export interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
level: 'colossus' | 'uber' | 'hero' | '1' | '2' | '3' | '4' | '5'
as?: React.Element | JSX.Element | JSX.IntrinsicElements
}
【问题讨论】:
-
不应该是
as?: React.Element | JSX.Element | JSX.IntrinsicElements | string -
不管我把错误
Property 'as' does not exist on type 'IntrinsicAttributes & HeadingProps & { children?: ReactNode; }'.保持不变 -
重启打字稿/捆绑器
-
使用 React.FC 不是 recommended,并且在 React 网站上没有找到它的当前文档。如果它是一个选项,也许尝试在 Typescript 中实现常规函数或类组件。
-
您到底想做什么?你想透明地传递所有样式组件道具吗?还是只有
as道具?
标签: javascript reactjs typescript styled-components