【TS】Error: Property ‘children‘ does not exist on type ‘X‘

2023-11-04

最近,在做项目模块的迁移,新项目需要使用ts,遇到的问题有点多,记录一下。

先来复现一下场景:

import React from 'react';

type PersonProps = {
    name: string;
    age: number;
};

const Person = (props: PersonProps) => {
  const { name, age } = props;
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
      {/*  Error: Property 'children' does not exist on type 'PersonProps'.ts(2339) */}
      {props.children}
    </div>
  );
};

const App = () => {
  return (
    <div>
      {/*  Error: Property 'children' does not exist on type 'IntrinsicAttributes & PersonProps'.ts(2322) */}
      <Person name="李四" age={26}>这是children哦</Person>
    </div>
  );
};

export default App;

出现这个报错的原因,是因为我们的props中并没有定义children类型,在PersonProps中加上该类型即可。

type PersonProps = {
    name: string;
    age: number;
    children: React.ReactNode; // 添加children类型
};

如果我们的子组件不需要传递给Person组件,则无需定义children,因为不会用到。

import React from 'react';

type PersonProps = {
    name: string;
    age: number;
};

const Person = (props: PersonProps) => {
  const { name, age } = props;
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <Person name="张三" age={25} />
    </div>
  );
};

export default App;

除了上述的写法外,我们也可以通过解构的形式定义Person方法,代码如下:

const Person = ({ name, age }: PersonProps) => {
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
    </div>
  );
};

如果想跳过类型检查或者不知道属性的类型,也可以使用any,当然,这种做法并不推荐,这相当于没有用到ts,代码如下:

// 禁用类型检查
const Person = ({ name, age }: any) => {
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
    </div>
  );
};

除此之外,也可以通过ReactFunctionComponent泛型接口,props默认定义为{}

import React from 'react';

type PersonProps = {
    name: string;
    age: number;
};

const Person: React.FunctionComponent<PersonProps> = ({ name, age }) => {
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <Person name="张三" age={25} />
    </div>
  );
};

export default App;

 等同于下面的这个例子:

import React, { FC } from 'react';

type PersonProps = {
    name: string;
    age: number;
};

const Person: FC<PersonProps> = ({ name, age }) => {
  return (
    <div>
      <div>{`${name}: ${age}`}</div>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <Person name="张三" age={25} />
    </div>
  );
};

export default App;

感兴趣的朋友可以看看源码:

type FC<P = {}> = FunctionComponent<P>;

interface FunctionComponent<P = {}> {
     (props: PropsWithChildren<P>, context?: any): ReactElement<any, any> | null;
     propTypes?: WeakValidationMap<P> | undefined;
     contextTypes?: ValidationMap<any> | undefined;
     defaultProps?: Partial<P> | undefined;
     displayName?: string | undefined;
}

OK,本文到此结束,如有不足,欢迎大家多多指正呀!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【TS】Error: Property ‘children‘ does not exist on type ‘X‘ 的相关文章

  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 从函数返回函数的目的是什么?

    阅读一些遗留代码 发现 A prototype setSize function var v1 new Vector2 return function size var halfSize v1 copy size multiplyScala
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 如何在没有 jQuery 的情况下删除 Javascript 中的元素

    我试图通过以下方式从 DOM 中删除 Div a 标签嵌套在其中 我想我正在寻找的是 jQuery 的纯 Javascript 版本 div remove 这是html设置 div a href Click me to remove the
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo

随机推荐

  • MATLAB编程(3)——MATLAB依次运行多个脚本.m文件

    问题描述 在做算法对比实验时 经常需要依次运行多个算法的代码 每个算法的入口程序是一个脚本 m文件 当然 算法的脚本文件中又会调用算法自己的子函数 我们期望MATLAB依次运行这些对比算法的脚本 m文件 而不用等到一个算法的程序执行结束后
  • 一次诡异的linux系统重启故障

    情况描述 同事反应说oracle数据库在周末的时候宕了 排查下问题 登到服务器上发现 oracle进程已经不存在 然后ps看了下监听进程 发现也不存在 这时候就怀疑是操作系统重启了 操作系统版本信息 root card paopi log
  • cmake add_subdirectory添加父级目录及其子目录的源码

    cmake add subdirectory添加父级目录及其子目录的源码 1 目录结构 tree main CMakeLists txt main cpp thirdlib CMakeLists txt myprintf cpp mypri
  • perl:取整、四舍五入、向上取整、向下取整

    取整int 四舍五入round 向上取整POSIX ceil 向下取整就是int或者POSIX floor 其中ceil和floor 要使用库POSIX 在perl源代码里加入 usr bin perl use strict use war
  • 为什么我们需要 HTTP/3?QUIC协议成功“上位”。

    TCP 是 Internet 上使用和部署最广泛的协议之一 多年来一直被视为网络基石 随着HTTP 3正式被标准化 QUIC协议成功 上位 UDP 取代 TCP成为基础协议 TCP究竟 输 在哪里 TCP与HTTP的不解之缘 HTTP 超文
  • 获取光标,并且移动至最后

    准备一个元素 div div 调用获取光标方法 传入元素 this keepLastIndex document getElementById sendMessageInput keepLastIndex obj if window get
  • nodeJS ---包管理工具

    包管理工具 一 概念介绍 1 1 包是什么 包 英文单词是 package 代表了一组特定功能的源码集合 1 2 包管理工具 管理 包 的应用软件 可以对 包 进行 下载安装 更新 删除 上传 等操作 借助包管理工具 可以快速开发项目 提升
  • 【React】 18课 简单理解redux

    本章主要讲redux的js文件内的代码原理以及使用方法 简单理解redux是干什么的 其实redux与vuex类似 是用于redux内各组件间通讯的数据存储仓库 首先我们来看以下文件目录结构 在此之前我们需要给React项目安装redux插
  • tensorflow中optimizer minimize自动训练简介和选择训练variable的方法

    本文主要介绍tensorflow的自动训练的相关细节 并把自动训练和基础公式结合起来 如有不足 还请指教 写这个的初衷 有些教程说的比较模糊 没体现出用意和特性或应用场景 面向对象 稍微了解点代码 又因为有限的教程讲解比较模糊而一知半解的初
  • hibernate学习总结

    创建java工程 导入hibernate jar包 配置hibernate cfg xml配置文件 创建数据库以及表 创建实体类 符合javabean规范的 创建实体类对应的xxxx hbm xml文件 完成映射的配置 创建test方法 测
  • [深度学习笔记(3)]模型保存与加载

    本系列是博主刚开始接触深度学习时写的一些笔记 写的很早了一直没有上传 趁着假期上传一下 作为分享 希望能帮助到你 目录 一 模型保存 二 模型加载 1 加载模型 2 加载模型参数 总结 一 模型保存 保存模型 模型参数 torch save
  • DevOps :Jenkins pipeline + sonarQube 完成静态检测 + junit 覆盖率报告。

    项目基础 1 maven3 3 9 java 1 8 2 jenkins 2 138 2 3 sonarQube6 7 5 汉化 前言 jenkins maven java1 8 环境安装过程不在描述 我们采用jenkins pipelin
  • F - Certifications (lower_bound)

    F Certificationshttps vjudge csgrandeur cn problem Gym 101343F Dr Samer与GX公司达成协议 为创新编程实验室的每堂课设计证书 GX公司给了Samer博士n个offer 其
  • 土壤湿度芯片YL-69测试

    功能 清翔51开发板 pcf8591的三通道CH3采集来自YL 69的AO 用液晶显示出来 效果图 实现过程 1 HexStrToStr和strtohexstr两个函数 https bbs csdn net wap topics 39201
  • ESP32-S2学习记录2-使用sd卡保存日志

    前言 本文旨在记录ESP32 S2的学习研究记录 实现ESP32 S2搭载NB IoT BC26模块进行低功耗网络通信 1 sd card init include
  • Hive的hiveserver2和beeline的使用以及spark thritfserver的启动

    Hive的hiveserver2和beeline的使用以及spark thritfserver的启动 Hive 的hiveserver2介绍 hiveserver2 的配置 beeline连接hiveserver2 配置hiveserver
  • element-ui更改el-table表头背景颜色、字体大小

    秃然发现一个问题 所以记录一下 每个人都知道
  • docker odoo创建模块

    docker启动的如下步骤将创建并安装一个新的插件模块 进入到工作目录即你要操作并放置新建的自定义模块的插件目录中 为新模块选择一个技术名称并使用该名称作为模块名创建目录 本例中 我们使用my library pert PertdeMacB
  • JPA-Specification常用条件查询构造方式

    JPA Specification常用条件查询构造方式 1 toPredicate方法 Predicate toPredicate Root
  • 【TS】Error: Property ‘children‘ does not exist on type ‘X‘

    最近 在做项目模块的迁移 新项目需要使用ts 遇到的问题有点多 记录一下 先来复现一下场景 import React from react type PersonProps name string age number const Pers