当前位置: 首页 > news >正文

react ts 定义基本类型,组件通过ref调用时类型提示

记录,以防忘记

子组件

import React, { forwardRef, Ref, useImperativeHandle, useState } from 'react';// 类型定义方式1
interface IProps {/**参数1 */params1: number | string | undefined/**参数2 */params2: number | string | undefined/**方法 */openDialog: () => void
}// 类型定义方式2
type PaginationType = {/**当前页 */page: number,/**每页条数 */pageSize: number/**总数 */total: number
}// 这里定义ref的类型,外面调用时会有提示
export interface AppRef {/**方法说明 */report: () => void
}const App = ({ params1, params2, openDialog }: IProps, ref: Ref<AppRef>) => {const [pagination, setPagination] = useState<PaginationType>({ page: 1, pageSize: 10, total: 0 })const init = () => {console.log('------------这里执行触发');}useImperativeHandle(ref, () => ({report: () => init()}))return <>{/* 选择时会有提示 */}{pagination.page}</>
}export default forwardRef(App);

父组件

// 使用时
import React, { useRef } from 'react';
import App, { AppRef } from './app.tsx';
const AppContent = () => {// 默认子组件的ref给nullconst AppRef = useRef<AppRef>(null)// 这样调用子组件的方法时,会有提示AppRef.current?.report()return <App ref={AppRef} />
}
export default AppContent;

动态属性对象: 使用索引签名([key: string]: type)来表示对象的动态属性

interface Dictionary {[key: string]: string;
}let dict: Dictionary = { a: "apple", b: "banana" };

交叉类型(Intersection Types)

interface Person {name: string;
}interface Worker {job: string;
}type Employee = Person & Worker;let employee: Employee = { name: "John", job: "Engineer" };

数组类型

type ItemType = {id: number,name: string
}const list:Array<ItemType>=[{id: 1, name: '张三'},{id: '2', name: '李四'}]const list1:Array<string|number>=[1, '2', 3]

Partial: 将一个类型的所有属性都变为可选

interface Person {name: string;age: number;
}type PartialPerson = Partial<Person>;  // 所有属性都变为可选
let partialPerson: PartialPerson = { name: "John" };

Required: 将一个类型的所有属性都变为必需

type RequiredPerson = Required<Person>;  // 所有属性变为必需
let fullPerson: RequiredPerson = { name: "John", age: 30 };  // 必须包含 name 和 age

Pick: 从类型中选择一部分属性

type NameOnly = Pick<Person, "name">;
let nameOnly: NameOnly = { name: "John" };

http://www.lryc.cn/news/517952.html

相关文章:

  • 二十三种设计模式-原型模式
  • 提升汽车金融租赁系统的效率与风险管理策略探讨
  • Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)
  • leetcode 2241. 设计一个 ATM 机器 中等
  • IO模型与NIO基础
  • 上门按摩系统架构与功能分析
  • ubuntu安装ssh9.2
  • linux wsl配置 redis远程连接
  • JVM 优化指南
  • 关机重启后,GitLab服务异常
  • 谷粒商城-高级篇完结-Sleuth+Zipkin 服务链路追踪
  • C语言基本知识复习浓缩版:标识符、函数、进制、数据类型
  • selenium已经登陆了 我怎么查看 网页 在fRequest xhr 的数据呢
  • Bash语言的数据库编程
  • 易支付二次元网站源码及部署教程
  • ios脚本巨魔商店多巴胺越狱基本操作教程
  • ScratchLLMStepByStep:SFT之分类微调
  • 人工智能知识分享第十天-机器学习_聚类算法
  • MySQL和Hive中的行转列、列转行
  • 汽车供应链关键节点:物流采购成本管理全解析
  • USB 驱动开发 --- Gadget 设备连接 Windows 免驱
  • 计算机网络之---数据链路层的功能与作用
  • 前端 图片上鼠标画矩形框,标注文字,任意删除
  • 为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)
  • 第二十八周机器学习笔记:PINN求正反解求PDE文献阅读——反问题、动手深度学习
  • 计算机毕业设计hadoop+spark知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习
  • C#Struct堆栈
  • 页面转 PDF 功能的实现思路与使用方法
  • 【保姆级教程】基于OpenCV+Python的人脸识别上课签到系统
  • docker-compose部署下Fastapi中使用sqlalchemy和Alembic