You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript版Create React App组件报错:JSX子元素类型不符

TS2746错误排查:JSX标签children属性类型不匹配问题

使用命令npx create-react-app . --template typescript创建全新TypeScript React项目后,在SchemesSelector.tsx组件的div标签处触发TS2746错误,提示:该JSX标签的'children'属性期望单个ReactNode类型子元素,但提供了多个。以下是组件代码和package.json配置,尝试多种在线方案未解决,求排查问题所在。

组件代码

import React from 'react';

interface Scheme {
  id: number,
  display_name: string,
}

export interface Props {
  schemes: Array<Scheme>;
}

const SchemesSelector = (props: Props) => {
  return (
    <div>
      <p>Select Schemes:</p>
      {props.schemes}
    </div>
  );
};

export default SchemesSelector;

package.json配置

{
  "name": "test",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@reduxjs/toolkit": "^1.9.2",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.12",
    "@types/react": "^18.0.28",
    "@types/react-dom": "^18.0.10",
    "@typescript-eslint/eslint-plugin": "^5.52.0",
    "@typescript-eslint/parser": "^5.52.0",
    "bootstrap": "^5.2.3",
    "eslint-config-google": "^0.14.0",
    "eslint-plugin-jsdoc": "^40.0.0",
    "node-sass": "^7.0.3",
    "react": "^18.2.0",
    "react-bootstrap": "^2.7.2",
    "react-dom": "^18.2.0",
    "react-redux": "^8.0.5",
    "react-router-dom": "^6.8.1",
    "react-scripts": "5.0.1",
    "redux": "^4.2.1",
    "typescript": "^4.9.5"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "plugins": [
      "@typescript-eslint",
      "jsdoc"
    ],
    "extends": [
      "react-app",
      "react-app/jest",
      "plugin:jsdoc/recommended",
      "eslint:recommended",
      "plugin:@typescript-eslint/recommended",
      "google"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

问题根源与解决方法

错误本质不是子元素数量过多,而是props.schemes是Scheme对象数组,不属于React可渲染的ReactNode类型。React无法直接渲染原始对象,必须将每个数组项转换为合法的JSX元素。

修改后的组件代码:

import React from 'react';

interface Scheme {
  id: number,
  display_name: string,
}

export interface Props {
  schemes: Array<Scheme>;
}

const SchemesSelector = (props: Props) => {
  return (
    <div>
      <p>Select Schemes:</p>
      {/* 将Scheme数组映射为可渲染的JSX元素 */}
      {props.schemes.map(scheme => (
        <div key={scheme.id}>{scheme.display_name}</div>
      ))}
    </div>
  );
};

export default SchemesSelector;

关键修改点:

  • 使用map遍历schemes数组,将每个Scheme对象转换为<div>(或其他标签)形式的JSX元素
  • 为每个动态生成的元素添加唯一key属性(这里用scheme.id,需保证唯一性)
  • 转换后,数组内容变为合法的ReactNode集合,TypeScript类型检查通过,错误消失

内容的提问来源于stack exchange,提问作者Surender Thakran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:02:34