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

news/2025/1/12 10:37:21/

记录,以防忘记

子组件

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.ppmy.cn/news/1562471.html

相关文章

01 Oracle自学环境搭建(Windows系统)

1 Oracle12C安装 1.1 下载 官网地址&#xff1a;https://www.oracle.com/ 进入官网→Resource→Customer Downloads 如果没有登录&#xff0c;会提示登录后后才能下载 选择适合自己的版本&#xff08;我电脑是Windows系统 64位&#xff09; 选择需要的安装包进行下载 双击下载…

继承(7)

大家好&#xff0c;今天我们继续来学习一下继承的知识&#xff0c;这方面需要大家勤动脑才能理解&#xff0c;那么我们来看。 1.9 protected关键字 在类和对象章节中&#xff0c;为了实现封装特性,java中引入访向限定符,主要限定:类或者类中成员能否在类外和其他包中被访问. …

网络安全设备主要有什么

网络安全设备指的肯定是硬件设备了&#xff0c;国内卖安全硬件的没几家&#xff0c;天融信&#xff0c;启明星辰&#xff0c;绿盟&#xff0c;深信服&#xff0c;就这四家卖的比较齐全吧&#xff0c;上它们官网看一下&#xff0c;就知道市面上主要的网络安全设备有哪些了。分类…

STM32 : GPIO_TypeDef

结构体定义 (GPIO_TypeDef) 是STM32微控制器中用于描述GPIO端口寄存器的典型方式。每个GPIO端口&#xff08;如 GPIOA、GPIOB 等&#xff09;都由一组寄存器组成&#xff0c;这些寄存器控制和监控GPIO引脚的状态。 寄存器解释 CRL (Control Register Low): 低8位引脚的控制寄存…

React使用Redux

Redux Redux 是一个用于 JavaScript 应用的状态容器,Redux 的核心思想是将应用程序的所有状态存储在一个单一的、全局的 store 中&#xff0c;并提供了一套规则来确保状态以一种可预测的方式进行变更. 安装 npm i reduxjs/toolkit react-redux创建目录 创建store文件夹&…

CTF随题思路—Misc[XMAN2018排位赛]通行证

打开题目是一串奇怪的base编码&#xff0c;猜测是多重解密或者加密 base64解码后得到 因为这串是flag&#xff0c;所以{}的顺序有问题&#xff0c;应使用栅栏密码&#xff0c;使用解码后发现顺序还是有问题&#xff0c;查看大佬的wp发现是W型栅栏加密&#xff0c;多次尝试后得…

C++11(2)

1.右值引用中的移动构造函数 对于右值的认识和划分,我们可以把右值分为纯右值(内置类型),将亡值(自定义类型),而对于左值和纯右值的构造,一般来说都是进行的拷贝构造. 就拿这个来说如果传的是左值,和纯右值,那么直接揍上面的那个函数进行拷贝构造,如果传的是一个将亡值,那就走…

手机租赁系统开发解决方案与市场趋势分析

内容概要 手机租赁系统开发正如一场技术与商业的双重舞会&#xff0c;双方时而相互辉映&#xff0c;时而却也是一场较量。在这片快速变幻的市场中&#xff0c;了解当前的技术实现与挑战尤为重要。例如&#xff0c;系统架构的选择、数据安全性以及用户体验设计都可能成为企业发…