Я пытаюсь использовать недавно добавленную поддержку для ввода детей в компиляторе TypeScript и @type/react, но борется. Я использую TypeScript версию 2.3.4.
Скажем, у меня такой код:
interface TabbedViewProps {children?: Tab[]}
export class TabbedView extends React.Component<TabbedViewProps, undefined> {
render(): JSX.Element {
return <div>TabbedView</div>;
}
}
interface TabProps {name: string}
export class Tab extends React.Component<TabProps, undefined> {
render(): JSX.Element {
return <div>Tab</div>
}
}
Когда я пытаюсь использовать эти компоненты следующим образом:
return <TabbedView>
<Tab name="Creatures">
<div>Creatures!</div>
</Tab>
<Tab name="Combat">
<div>Combat!</div>
</Tab>
</TabbedView>;
Я получаю сообщение об ошибке следующим образом:
ERROR in ./src/typescript/PlayerView.tsx
(27,12): error TS2322: Type '{ children: Element[]; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<TabbedView> & Readonly<{ children?: ReactNode; }> ...'.
Type '{ children: Element[]; }' is not assignable to type 'Readonly<TabbedViewProps>'.
Types of property 'children' are incompatible.
Type 'Element[]' is not assignable to type 'Tab[] | undefined'.
Type 'Element[]' is not assignable to type 'Tab[]'.
Type 'Element' is not assignable to type 'Tab'.
Property 'render' is missing in type 'Element'.
Кажется, вывод типа детей как только Element[]
вместо Tab[]
, хотя это единственный тип детей, которые я использую.
EDIT: также было бы хорошо ограничивать интерфейс реквизита для детей, а не ограничивать тип дочерних компонентов напрямую, так как все, что мне нужно сделать, это вытащить некоторые специфические реквизиты из дочерних компонентов.