React 中 JSX.Element 的 TypeScript 接口问题

Posted

技术标签:

【中文标题】React 中 JSX.Element 的 TypeScript 接口问题【英文标题】:TypeScript Interface Issue with JSX.Element in React 【发布时间】:2021-10-30 23:04:03 【问题描述】:

我正在尝试在 React 中为数组创建一个类型,但出现以下错误。我不确定我在这里缺少什么。

谁能帮我找出我缺少的东西?

谢谢

interface RowsData 
  [key: string]: string | number | JSX.Element;


const rows: RowsData = [
   id: 1, name: 'A', action: <div style= color: 'blue' > Hello </div> ,
   id: 2, name: 'B', action: <div style= color: 'blue' > World </div> ,
   id: 3, name: 'C', action: <div style= color: 'blue' > Foo </div> 
];

错误

Type ' id: number; name: string; action: JSX.Element; ' is not assignable to type 'string | number | Element'.
  Object literal may only specify known properties, and 'id' does not exist in type 'Element'.ts(2322)

【问题讨论】:

您的意思是const rows: RowsData[] = [...?即声明行的类型为RowData[], not RowsData. 【参考方案1】:

您的输入需要更改为,

interface Row 
  id: number;
  name: string;
  action: React.ReactNode;


const rows: Row[] = [
  id: 1, name: 'A', action: <div style=color: 'blue'> Hello </div>,
  id: 2, name: 'B', action: <div style=color: 'blue'> World </div>,
  id: 3, name: 'C', action: <div style=color: 'blue'> Foo </div>,
];

【讨论】:

该死的...... facepalm 这就是你的大脑在编码数小时后死亡时会发生的事情。非常感谢。 我想该休息一下了 :-) 是的,我也这么认为;)顺便说一句,JSX.Element 和 React.ReactNode 有什么区别,为什么你使用 React.ReactNode?​​span> 这应该会详细回答您的问题 - ***.com/questions/58123398/…

以上是关于React 中 JSX.Element 的 TypeScript 接口问题的主要内容,如果未能解决你的问题,请参考以下文章

umi中TS报错:TS7026: JSX element implicitly has type ‘any’…

错误 TS2602:JSX 元素隐式具有类型“任何”,因为全局类型“JSX.Element”不存在

类型“JSX.Element”不可分配给类型“元素”

不能用作 JSX 组件。它的返回类型“void”不是有效的 JSX element.ts(2786)

如何在 React 中编写 useComponent 自定义钩子?

JSX 元素类型错误:将类型添加到从 .map 函数返回的对象