Reactjs 使用props.children和样式化组件;作为「;带字体脚本的道具

Reactjs 使用props.children和样式化组件;作为「;带字体脚本的道具,reactjs,typescript,styled-components,Reactjs,Typescript,Styled Components,我已经浏览了一些现有的解决方案和帖子,但实际上找不到任何解决方案 所以,我将React与Typescript和样式化组件一起使用 我的项目的一部分是标题组件。理想情况下,我想象着使用它就像helloworld无论我在哪里需要它 然而,类型脚本并不像你想象的那么聪明。您可能希望h${props.level}根据props.level变量的类型计算为联合类型“h1”|“h2”|……。相反,它只是字符串。因此,您需要在代码中的某个地方使用as断言,以声明此字符串是JSX.intrinsiceelem

我已经浏览了一些现有的解决方案和帖子,但实际上找不到任何解决方案

所以,我将React与Typescript和样式化组件一起使用

我的项目的一部分是
标题
组件。理想情况下,我想象着使用它就像
helloworld无论我在哪里需要它

然而,
类型脚本并不像你想象的那么聪明。您可能希望
h${props.level}
根据
props.level
变量的类型计算为联合类型
“h1”|“h2”|……
。相反,它只是
字符串
。因此,您需要在代码中的某个地方使用
as
断言,以声明此
字符串
JSX.intrinsiceelements
的有效键

将联合体
“h1”|“h2”|……
作为一种类型是困难的,因为
Props['level']
是一个由
数字
文字而不是
字符串
文字组成的联合体。但我们并不真正需要工会,因为它的标题类型并不重要。您可以将
用作“h1”
,这样您就没事了

export default function Heading(props: Props) {
  return <S.Heading as={`h${props.level}` as "h1"}>{props.children}</S.Heading>;
}
评估结果为:

"h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "hr"

as const
将按照well@AlekseyL. 您的
作为const
,您将把它放在哪里?关于这方面有什么资源吗@琳达·佩斯特哇,你让我大吃一惊。这似乎是一个超级黑客的方法,我甚至不知道。此外,模板文本的
as
甚至没有记录在引用链接中。@Tanckom而不是
as“h1”
<代码>as const
将防止类型扩展到
字符串
,下面是指向docs@Tanckom的链接
"h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "hr"