Home > Mobile >  Generic type 'FlatListProps<ItemT>' requires 1 type argument(s)
Generic type 'FlatListProps<ItemT>' requires 1 type argument(s)

Time:09-21

I have an article component to which I pass a ListHeaderComponent which is a props of FlatListProps like this:

<Article
    article={article}
    ListHeaderComponent={<HomeBackgroundImage />}
/>

In Article.tsx I have set the following type:

type Props = {
    article: ArticleType;
} & Omit<FlatListProps, 'data' | 'renderItem' | 'showsVerticalScrollIndicator'>;

However, I get the following error:

Generic type 'FlatListProps<ItemT>' requires 1 type argument(s).

But I am not quite sure what am I supposed to pass as an argument.

type Props = {
    article: ArticleType;
} & Omit<FlatListProps<any>, 'data' | 'renderItem' | 'showsVerticalScrollIndicator'>;

This removes the error, however, I start getting the error the item explicitly has any type in the FlatList:

const Article: FunctionComponent<Props> = ({ article, ...rest }) => {
    return (
        <FlatList
            data={article.sections}
            renderItem={({ item: section, index }) => {
                const firstCard = section.items.find((item) => {
                    return item.contentType !== 'heading' && item.contentType !== 'body';
                });
                const indexOfFirstCard = section.items.indexOf(firstCard!);
                const sectionType = firstCard?.contentType;

                return (
                    <Section isFirst={index === 0} sectionType={sectionType}>
                        {section.items.map((item, idx) => (
                            <Item key={idx} item={item} itemIndex={idx} indexOfFirstCard={indexOfFirstCard} />
                        ))}
                    </Section>
                );
            }}
            showsVerticalScrollIndicator={false}
            {...rest}
        />
    );
};

CodePudding user response:

From looking at the react-native code for FlatList, it seems the ItemT in FlatListProps<ItemT> is the type of the element in the data array. So, in your case it would be the type of an article.sections element, which can be written as ArticleType['sections'][number].

  • Related