TypeScript并非始终选择正确的重载类型

时间:2019-05-23 10:31:45

标签: reactjs typescript typescript-typings typescript-generics

嗯,可能会有点复杂...

所以我想创建一个具有'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提供更多提示的方式,所以它将在所有情况下选择正确类型

复制:

https://codesandbox.io/s/nice-snow-rwvgb?fontsize=14

0 个答案:

没有答案