实用指南:Typescript高级类型详解

news/2025/10/4 16:16:48/文章来源:https://www.cnblogs.com/ljbguanli/p/19125689

实用指南:Typescript高级类型详解

Typescript中的高级类型主要有下面几种:

1. 联合类型 (Union Types)

type Status = "success" | "error" | "loading";
type ID = string | number;
function handleStatus(status: Status) {// status 只能是 "success", "error", "loading" 之一
}

2. 交叉类型 (Intersection Types)

interface Person {name: string;age: number;
}
interface Employee {employeeId: string;department: string;
}
type Staff = Person & Employee;
// Staff 必须同时包含 Person 和 Employee 的所有属性

3. 映射类型 (Mapped Types)

// 将所有属性变为可选
type Partial = {[P in keyof T]?: T[P];
};
// 将所有属性变为只读
type Readonly = {readonly [P in keyof T]: T[P];
};
interface User {id: number;name: string;
}
type PartialUser = Partial; // { id?: number; name?: string; }

4. 条件类型 (Conditional Types)

type IsString = T extends string ? true : false;
type A = IsString; // true
type B = IsString; // false
// 内置示例
type Exclude = T extends U ? never : T;
type Extract = T extends U ? T : never;

5. 索引访问类型 (Indexed Access Types)

interface User {id: number;name: string;address: {street: string;city: string;};
}
type UserName = User["name"]; // string
type Address = User["address"]; // { street: string; city: string; }
type UserProperties = User[keyof User]; // string | number | { street: string; city: string; }

6. 模板字面量类型 (Template Literal Types)

type EventName = "click" | "hover" | "focus";
type HandlerName = `on${Capitalize}`;
// "onClick" | "onHover" | "onFocus"
type CSSValue = `${number}px` | `${number}em` | `${number}%`;

7. 递归类型 (Recursive Types)

type Json =| string| number| boolean| null| { [key: string]: Json }| Json[];
type DeepReadonly = {readonly [P in keyof T]: T[P] extends object? DeepReadonly: T[P];
};

区别与联系

区别

类型主要用途特点
联合类型表示多个类型之一使用 `` 运算符
交叉类型合并多个类型使用 & 运算符
映射类型批量转换属性使用 in 关键字
条件类型基于条件选择类型使用三元运算符
索引访问获取特定属性类型使用 [] 语法
模板字面量字符串模式匹配使用模板字符串语法

联系与组合使用

这些高级类型经常组合使用,形成强大的类型编程能力:

// 组合使用示例
interface Product {id: number;name: string;price: number;category: "electronics" | "clothing" | "books";
}
// 获取所有字符串属性的键
type StringKeys = {[K in keyof T]: T[K] extends string ? K : never;
}[keyof T];
type ProductStringKeys = StringKeys; // "name" | "category"
// 创建动态的 getter 类型
type Getters = {[K in keyof T as `get${Capitalize}`]: () => T[K];
};
type ProductGetters = Getters;
// {
//   getId: () => number;
//   getName: () => string;
//   getPrice: () => number;
//   getCategory: () => "electronics" | "clothing" | "books";
// }

这些高级类型让 TypeScript 的类型系统变得极其强大,能够精确地描述复杂的类型关系,提供更好的类型安全和开发体验。

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

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

相关文章

集合幂级数,FMT 与 FWT 学习笔记

应该是我最后也是唯一的学习笔记了。参考资料 https://www.cnblogs.com/alex-wei/p/set_power_series.html https://www.cnblogs.com/Troverld/p/14601821.html https://www.luogu.com.cn/article/y0unggsj警告! 本文…

2025多校CSP模拟赛1

2025多校CSP模拟赛1 开 T1 水,开 T2 发现能乱搞,搞完发现是正确的。 开 T3 发现是熟悉的 dp,马上开写一个插板。 写了 2h 后发现占地面积不好算,放弃了。 T1 交友 发现只要特判类似 CG GC即可。 T2 炼金 因为环一定…

建设网站实训心得商品房合同备案查询

目录 一、BottomNavigationBar介绍 二、BottomNavigationBar的常用方法及其常用类 (一)、常用方法 1. 添加菜单项 2. 移除菜单项 3. 设置选中监听器 4. 设置当前选中项 5. 设置徽章 6. 样式和颜色定制 7. 动画效果 8. 隐藏底部导航栏。 9、设…

学做甜品的网站建立自己的影视网站

文章目录1. 题目2. 解题2.1 二分查找2.2 DP1. 题目 给你一个数组 colors,里面有 1、2、 3 三种颜色。 我们需要在 colors 上进行一些查询操作 queries,其中每个待查项都由两个整数 i 和 c 组成。 现在请你帮忙设计一个算法,查找从索引 i 到…

现在都不用dw做网站了吗网站审核员做点啥

经过了前两章对阅读理解学习法的实践运用,想必大家知道该怎么做了,至于效果,我不敢保证对每个人都有效,欢迎大家实践后给予反馈,大家一起寻找更好的方法。下面进入第三章,需要说明的是前两章虽然简单但是很…

上传文件前端需要注意的三个点:

上传文件前端需要注意的三个点: <form action="/upload" method="post" enctype="multipart/form-data">姓名: <input type="text" name="name" > &l…

AT_arc189_b [ARC189B] Minimize Sum

你发现这个操作等价于什么,将两两之间距离重组了一下。 具体来说,你差分一下,发现一次操作只会交换同奇偶性位置的差分数组,根据系数贪心(这是经典顺序对顺序),排序一下即可。

详细介绍:netpoll性能调优:Go网络编程的隐藏利器|Go语言进阶(8)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Vibe Coding - MCP Feedback Enhanced(交互反馈 MCP) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Jenkins安装与配备

Jenkins安装与配备pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Co…

网站的布局方式有哪些内容网络培训的功能主要有

我们在开发的过程中当使用到kafka监听消费的时候会使用到KafkaListener注解&#xff0c;下面我们就介绍下它的常见属性和使用。 一、介绍 KafkaListener 是 Spring Kafka 提供的一个注解&#xff0c;用于声明一个方法作为 Kafka 消息的监听器 二、主要参数 1、topic 描述&…

商城网站开发解决方案湖南企业seo优化推荐

Team 10 – Voice Mail 该软件项目构想/计划/实现/创新等方面的优劣&#xff1a; 构想和计划 1. 设计思路清晰&#xff0c;设计说明和文档较全 2. 多种人机交互方式&#xff0c;所以该项目亮点之处就在于其人机交互 实现 3. 设计良好的UI 4. 下载安装Windows XP版本的软…

郴州网站策划浙江外贸网站建设

本周我出席了OpenStack峰会。在峰会上绝大多数应用部署都是基于Linux的&#xff0c;然而&#xff0c;大家使用的笔记本电脑最多的还是苹果产的。人们写代码&#xff0c;最终要把代码部署到Linux上&#xff0c;但在编码时却使用另外一种不同的操作系统。 最有趣的还是他们使用的…

网站实名认证怎么做网站分析怎么做的

欢迎观看《Spring Framework实战》视频教程 方法注入 在大多数应用场景中&#xff0c;容器中的大多数bean都是单例&#xff08;singletons&#xff09;的。当单例bean需要与另一个单例bean协作或非单例bean需与另一非单例bean协作时&#xff0c;通常通过将一个bean定义为另一个…

400网站建设价格信誉好的常州做网站

"Everything" 是一个 Windows 平台上的免费软件&#xff0c;它是一款功能强大的本地文件搜索工具。它允许用户在计算机上快速而准确地搜索文件和文件夹。以下是一些 "Everything" 的主要特点&#xff1a; 实时搜索&#xff1a; "Everything" 提供…

dw5怎样做网站备案号怎么添加到网站

动态定时任务 原理 采用定时任务线程池ThreadPoolTaskScheduler来实现定时任务。动态定时任务就是可以配置的&#xff0c;而不是写死在代码中。所以我们要将其写入到数据库中&#xff0c;然后暴露接口就可以进行配置比如创建、启动、结束任务。 数据库脚本 DROP TABLE IF EXIS…

帮人做网站赚钱吗南京江宁网站制作

HTML 列表中的dl,dt,dd,ul,li,ol区别及应用 HTML 列表中的dl,dt,dd,ul,li,ol区别及应用 工具/原料 html&#xff0c;dw软件方法/步骤 1无序列表 无序列表是一个项目的列表&#xff0c;此列项目使用粗体圆点&#xff08;典型的小黑圆圈&#xff09;进行标记。 无序列表始于 <…

实用指南:基于Selenium+Python的web自动化测试框架

实用指南:基于Selenium+Python的web自动化测试框架pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

实施网站推广的最终目的是startup wordpress

HTML学习笔记 day one Chapter one 网站开发基础 1.2网站的基本架构 网站的基本要素&#xff1a;内容&#xff0c;页面&#xff0c;超链接 动态网页和静态网页的区别在于&#xff1a;动态网页会自动更新&#xff0c;后缀名是.asp或者.aspx;而静态网页不会自动更新&#xff0c…