Ну, это может быть немного сложнее ...
Итак, я хотел создать Компонент со свойством 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