reactjs 类型“Element[]”缺少类型“Element”的以下属性:类型, prop ,钥匙

m1m5dgzv  于 2023-08-04  发布在  React
关注(0)|答案(7)|浏览(231)

我有一个标准的箭头MapES7函数,带有Typescript和React环境:

const getItemList: Function = (groups: any[]): JSX.Element => 
  group.map((item: any, i: number) => {
    const itemCardElemProps = { handleEvents: () => {}, ...item}
    return <Item key={`${item.id}_${i}`} {...itemCardElemProps} />
  })

字符串
并得到错误:

TS2739: Type 'Element[]' is missing the following properties from type 'Element': type, props, key


版本:typescript 3.5.3

eh57zj3b

eh57zj3b1#

你也可以把一个JSX.Element作为片段发送回:

interface IOptions {
   options: string[]
}

const CardArray: React.FC<IOptions> = ({ options }) => {
   return <>{options.map(opt => opt)}</>
}

字符串
这样您就匹配了返回的类型,而它不会影响您的标记。

ctzwtxfj

ctzwtxfj2#

要修复错误,需要将函数输出的类型从JSX.Element更改为React.ReactElement[]JSX.Element[],如下所示:

const getItemList: Function = (groups: any[]): React.ReactElement[] => 
  groups.map((item: any, i: number) => {
    const itemCardElemProps = { key: item.id, handleEvents: () => {}, ...item}
    return <Item {...itemCardElemProps} />
  })

字符串
或者你可以用interface的样式重写它:

interface IGetItemList {
  (groups: any[]): React.ReactElement[] // or JSX.Element[]
}

const getItemList: IGetItemList = groups =>
  groups.map((item: any, i: number) => {
    const itemCardElemProps = { key: item.id, handleEvents: () => {}, ...item }
    return <Item {...itemCardElemProps} />
  })

vltsax25

vltsax253#

@Roman他们一定是改变了什么,这对我不起作用
代码:

const CardArray = (props: Items): JSX.Element[] => {
    return props.items.map((item) => <Item data={item} />);
};

export default CardArray;

字符串
错误:

JSX element type 'Element[]' is not a constructor function for JSX elements.
Type 'Element[]' is missing the following properties from type 'Element': type, props, key


编辑:没关系,我只是需要添加函数类型,到函数中……如果你问我的话,我觉得有点蠢。
什么让我工作:

const CardArray: Function = (props: Items): JSX.Element[] => {
    return props.items.map((item) => <Item data={item} />);
};

hkmswyz6

hkmswyz64#

我得到的错误,因为我继承JSX.元素,但我使用的是.ts文件扩展名。当我使用.tsx文件扩展名我的问题解决.


的数据

f87krz0w

f87krz0w5#

我使用这段代码也会遇到同样的错误:

let expensesContent = <p>No expenses found.</p>;

if (filteredExpenses.length > 0) {
    expensesContent = filteredExpenses.map((expense) => (<ExpenseItem expense={expense} key={expense.id} />));
}

字符串
修复方法是将第一行改为:

let expensesContent: JSX.Element[] = [(<p>No expenses found.</p>)];

1l5u6lss

1l5u6lss6#

我遇到了一个与此错误相关的问题,可能会发生在其他人身上。我是TS新手,有使用[]打开和关闭返回JSX的坏习惯。因为我刚发现TS不允许。因此,它们应替换为()


的数据

jobtbby3

jobtbby37#

需要将JSX.Element的函数输出类型改为ReactNode[],如下所示:

import { ReactNode } from 'react'

const getItemList: Function = (groups: any[]): ReactNode[] => 
    groups.map((item: any, i: number) => {
    const itemCardElemProps = { key: item.id, handleEvents: () => {}, 
     ...item}
    return <Item {...itemCardElemProps} />
})

字符串

相关问题