TypeScript не всегда выбирает правильный тип перегрузки - PullRequest
0 голосов
/ 23 мая 2019

Ну, это может быть немного сложнее ...

Итак, я хотел создать Компонент со свойством 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

...