TS开发的类型索引目录

TypeScript 相关知识整理

一、相关文档

  1. Web API 类型:https://developer.mozilla.org/zh-CN/docs/Web/API
  2. HTML DOM类型:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement
  3. React类型文档:https://react-typescript-cheatsheet.netlify.app/、
  4. TS实用类型: https://www.typescriptlang.org/docs/handbook/utility-types.html

二、HTML DOM 相关类型

HTMLElement

  • HTMLElement 是所有HTML元素的基类。它提供了通用的属性和方法。
let element: HTMLElement = document.getElementById('myElement');

元素专用类型

每一个html元素都有它专属的节点类型:HTMLDivElement、HTMLButtonElement等等。

const input: HTMLInputElement = document.querySelector('input');

事件类型

  1. 通用事件类型:Event(Event reference)
element.addEventListener('click', (e: Event) => {e.preventDefault();
});
  1. 专用事件类型(推荐使用这个而不是通用的Event)
  • MouseEvent:鼠标事件
buttonElement.addEventListener('click', (e: MouseEvent) => {console.log(e.clientX, e.clientY);
});
  • KeyboardEvent:键盘事件
const handleKeyDown = (event: KeyboardEvent) => {if (event.key === 'Enter') {console.log('Enter key pressed');}
};
document.addEventListener('keydown', handleKeyDown);
  • DragEvent:拖拽事件

三、React 类型

React 类型文档:TypeScript in React

1. 函数组件:React.FC

const MyComponent: React.FC<{ title: string }> = ({ title }) => {return <div>{title}</div>;
};

2. 类组件:React.Component<PropsType, StateType>

class MyComponent extends React.Component<PropsType, StateType> {//...
}

3. Hooks 类型

  • useState
const [count, setCount] = useState<number>(0);
  • useRef
const inputRef = useRef<HTMLInputElement | null>(null);

4. React事件类型

  • React.MouseEvent
const handleChange = (e: React.MouseEvent<HTMLInputElement>) => {console.log(e.target.value);
};
  • KeyboardEvent
  • DragEvent
  • ClipboardEvent

5. React.MouseEventHandler

const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {console.log('Button clicked', event);
};
<button onClick={handleClick}>Click</button>

四、常用 TypeScript 语法

一些真的很常用的type / interface / 并集、交集就不介绍了,本章的重点在“实用类型”。

实用类型

1. 泛型
function identity<T>(arg: T): T {return arg;
}
2. 类型断言:只有在必要明确时使用。
const input = document.getElementById('myInput') as HTMLInputElement;
3. 实用类型

https://www.typescriptlang.org/docs/handbook/utility-types.html

  • Pick、Partial、Omit
interface User {id: number;name: string;email: string;
}
// 所有属性可选
type PartialUser = Partial<User>;
// 选择特定属性
type NameOnly = Pick<User, 'name'>;
type PickObj = Pick<User, 'name' | 'id'>
// 排除特定属性
type WithoutId = Omit<User, 'id'>;
type OmitObj = Omit<User, 'name' | 'id'>
  • typeof 、keyof
// keyof: 获取键的联合类型
type UserKeys = keyof User;  // "id" | "name" | "email" 
// typeof: 自动推导对象的值类型
// 现在定义了一个常量,想要用它的类型{id:number,name:string,email:string},就可以用typeof
const defaultUser = { id: 0, name: 'Guest', email: 'guest@example.com' };
type GuestType = typeof defaultUser; 
  • Record<K, T>:用于定义一个对象类型,具有天然的约束性
    - K 表示对象键的类型(必须是 string | number | symbol 或其子类型)
    - T 表示对象值的类型

  • PropertyKey:PropertyKey 是 TypeScript 内置的联合类型,表示对象键的所有可能类型:
    type PropertyKey = string | number | symbol;

  • ReturnType:用于获取函数类型的返回值类型

function add(a: number, b: number): number {return a + b;
}
type AddReturnType = ReturnType<typeof add>;  
// AddReturnType的类型为number
  • Parameters:用于获取函数类型Type的参数类型
function multiply(a: number, b: number): number {return a * b;
}
type MultiplyParameters = Parameters<typeof multiply>; 
// MultiplyParameters的类型为[number, number]
4. 其他

另外我们在typing.d.ts定义了一些其他的实用类型

/** Partial的加强版,可以使用于Object, 将T中的每一个属性变为可选 */
/** 将T中的每一个属性变为可选 */
declare type RecursivePartial<T> = {[P in keyof T]?: T[P] extends (infer U)[]? RecursivePartial<U>[]: T[P] extends object? RecursivePartial<T[P]>: T[P];
};
5. 类型守卫
function isString(value: any): value is string {return typeof value === 'string';
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 对列表进行排序的 5 种方法

在 Python 中&#xff0c;排序是一个非常常见且重要的操作&#xff0c;尤其是对列表的排序。Python 提供了多种方法来实现排序操作&#xff0c;从内置函数到自定义排序逻辑&#xff0c;都可以方便地满足不同的需求。以下将介绍 Python 对列表进行排序的 5 种方法&#xff0c;并…

2025年1月26日(超声波模块:上拉或下拉电阻)

添加上拉或下拉电阻是在电子电路设计和嵌入式系统编程中常用的一种技术手段&#xff0c;下面为你详细解释其含义、作用和应用场景。 基本概念 在数字电路里&#xff0c;引脚的电平状态通常有高电平&#xff08;逻辑 1&#xff09;和低电平&#xff08;逻辑 0&#xff09;两种…

项目概述与规划 (I)

项目概述与规划 (I) JavaScript的学习已经接近尾声了&#xff0c;最后我们将通过一个项目来讲我们在JavaScript中学习到的所有都在这个项目中展现出来&#xff0c;这个项目的DEMO来自于Udemy中的课程&#xff0c;作者是Jonas Schmedtmann&#xff1b; 项目规划 项目步骤 用户…

深入探讨Web应用开发:从前端到后端的全栈实践

目录 引言 1. Web应用开发的基本架构 2. 前端开发技术 HTML、CSS 和 JavaScript 前端框架与库 响应式设计与移动优先 3. 后端开发技术 Node.js&#xff08;JavaScript后端&#xff09; Python&#xff08;Flask和Django&#xff09; Ruby on Rails Java&#xff08;S…

docker如何查看容器启动命令(已运行的容器)

docker ps 查看正在运行的容器 该命令主要是为了详细展示查看运行时的command参数 # 通过docker --no-trunc参数来详细展示容器运行命令 docker ps -a --no-trunc | grep <container_name>通过docker inspect命令 使用docker inspect&#xff0c;但是docker inspect打…

为AI聊天工具添加一个知识系统 之62 详细设计 之3:AI操作系统 之1

本文要点 要点 考虑下面的一组整理&#xff08;重点看一下用词、分组分行分类以及 排列组合&#xff09;&#xff0c;看看应该如何将他们组织到本项目程序中&#xff0c;是否同时还丰富了前面讨论的AI操作系统和Lexicographer 程序的内容。 1、工作任务&#xff1a;运行时编译…

项目集成RabbitMQ

文章目录 1.common-rabbitmq-starter1.创建common-rabbitmq-starter2.pom.xml3.自动配置1.RabbitMQAutoConfiguration.java2.spring.factories 2.测试使用1.创建common-rabbitmq-starter-demo2.目录结构3.pom.xml4.application.yml5.TestConfig.java 配置交换机和队列6.TestCon…

LLM大模型推理中的常见数字

1. 聊天机器人Chatbot&#xff0c;一般&#xff0c;input tokens : output tokens 1100:15 2. LLama2的tokenizer&#xff0c;中文情况下&#xff0c;token:汉字1:1.01 3. prefilling阶段的吞吐量(tokens/s)&#xff0c;一般是decoding阶段的50~100倍。 4. 4张带有NVLink的…

【AI日记】25.01.26

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;自由宪章 律己 AI&#xff1a;6 小时作息&#xff1a;00:30-8:30短视频&#xff1a;大于 1 小时读书和写作&a…

RK3568 adb使用

文章目录 一、adb介绍**ADB 主要功能****常用 ADB 命令****如何使用 ADB****总结** 二、Linux下载adb**方法 1&#xff1a;使用包管理器&#xff08;适用于 Ubuntu/Debian 系统&#xff09;****方法 2&#xff1a;通过 Snap 安装&#xff08;适用于支持 Snap 的系统&#xff09…

STM32项目分享:智能宠物喂食系统(升级版)

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; STM32智能宠物喂食系统(升级版) &#xff08;资…

JS 时间格式大全(含大量示例)

在 JS 中&#xff0c;处理时间和日期是常见的需求。无论是展示当前时间、格式化日期字符串&#xff0c;还是进行时间计算&#xff0c;JavaScript 都提供了丰富的 API 来满足这些需求。本文将详细介绍如何使用 JavaScript 生成各种时间格式&#xff0c;从基础到高级&#xff0c;…

软件测试 —— 性能测试(jmeter)

软件测试 —— 性能测试&#xff08;jmeter&#xff09; 什么是jmeter安装jmeterjmeter常用组件线程组取样器结果树 我们之前学习了接口测试工具Postman&#xff0c;我们今天要学习的是性能测试工具——jmeter 什么是jmeter Apache JMeter 是一个开源的性能测试工具&#xff…

element-plus 的table section如何实现单选

如果是单选那么全新的按钮应该隐藏或者不可编辑的状态。但是我没找到改变成不可编辑的方法&#xff0c;只能采取隐藏 <template><!-- 注意要包一层div根元素&#xff0c;否则css样式可能会不生效&#xff0c;原因不详 --><div><el-table ref"proTab…

电阻补偿OTA的噪声分析

上文&#xff08;补偿电阻对ota零极点的影响-CSDN博客&#xff09;分析了补偿电阻对五管OTA零极点的影响&#xff0c;该篇借分析电阻补偿OTA的噪声来串联复习下噪声章节的一些基础概念。 1.噪声分析 辅助定理 开始分析OTA噪声之前&#xff0c;先引入一个辅助定理&#xff08;R…

从CRUD到高级功能:EF Core在.NET Core中全面应用(四)

初识表达式树 表达式树&#xff1a;是一种可以描述代码结构的数据结构&#xff0c;它由一个节点组成&#xff0c;节点表示代码中的操作、方法调用或条件表达式等&#xff0c;它将代码中的表达式转换成一个树形结构&#xff0c;每个节点代表了代码中的操作例如&#xff0c;如果…

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 2. 思路 直接暴力…

在Qt中实现点击一个界面上的按钮弹窗到另一个界面

文章目录 步骤 1&#xff1a;创建新窗口类步骤 2&#xff1a;设计窗口的 UI步骤 3&#xff1a;设计响应函数 以下是一个完整的示例&#xff0c;展示在Qt中如何实现在一个窗口中通过点击按钮弹出一个新窗口。 步骤 1&#xff1a;创建新窗口类 假设你要创建一个名为 WelcomeWidg…

StarRocks 安装部署

StarRocks 安装部署 StarRocks端口&#xff1a; 官方《配置检查》有服务端口详细描述&#xff1a; https://docs.starrocks.io/zh/docs/deployment/environment_configurations/ StarRocks架构&#xff1a;https://docs.starrocks.io/zh/docs/introduction/Architecture/ Sta…

二叉树的最大深度(力扣104)

所谓二叉树的最大深度其实也是根节点的最大高度&#xff0c;同时也是该二叉树的高度。那么要解决这个问题&#xff0c;我们该选择哪一种遍历方式呢&#xff1f; 要获取最大高度&#xff0c;我们需要比较节点的左右子树的高度&#xff0c;取较大的那个值返回给父节点。通过不断…