嗯,可能会有点复杂...
所以我想创建一个具有'as'或'component'属性的组件,更改该组件的根包装。示例:
type FlexProps = { flexGrow: ... }
type SomeOtherCompProps = { someOtherProp: ... }
declare function Flex(props: FlexProps): React.ReactElement
declare function SomeOtherComp(props: FlexProps): React.ReactElement
<Box component={Flex} />
Box组件的声明看起来像这样:
declare function Box(props: BoxProps & FlexBox): ReactElement
declare function Box<T>(props: BoxProps & { component: React.ComponentType<T> } & T ): ReactElement
这意味着默认下,我的Box组件应从 FlexBox 中扩展。
<Box /> // have { flexGrow } as a properties (at this point its work fine)
接下来的行由于某种原因触发 (有趣,但并非始终如此,如果T从Flex组件延伸出来,它可能会选择第一个重载?) 第一个 (默认) 超载 (具有默认Flex组件的那个)
<Box component={SomeOtherComp} /> // this should { someOtherProp } as its properties, BUT receive { flexGrow } ...
所以这个问题... 有没有替代方式,或者是帮助TS提供更多提示的方式,所以它将在所有情况下选择正确类型 ?
复制: