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

理解typeScript中的高级类型

在 TypeScript 中,高级类型允许更灵活且更具表达能力的类型定义,尤其在复杂数据结构或代码中处理多种可能的类型时特别有用。以下是常见的高级类型及其使用场景:

1. 交叉类型(Intersection Types)

交叉类型用于将多个类型合并为一个类型。

type Person = { name: string };
type Contact = { phone: string };
type Employee = Person & Contact; // 交叉类型let employee: Employee = { name: "Alice", phone: "123-4567" };

使用场景:当需要对象同时具备多个类型时,如员工既有姓名也有联系方式。

2. 联合类型(Union Types)

联合类型允许值可以是几种类型中的一种。

let id: number | string;
id = 101;  // 合法
id = "ID101";  // 也合法

使用场景:当变量可以有多种类型值时,典型例子是处理函数接受多个输入类型。

3. 泛型(Generics)

泛型使函数、类或接口能够在类型不明确的情况下工作,并能在调用时指定类型。

function identity<T>(arg: T): T {return arg;
}let output = identity<string>("Hello");

使用场景:在开发可以处理多种类型的复用代码时,如数组处理函数或工具类。

4. 条件类型(Conditional Types)

条件类型基于条件的真假,返回不同的类型。

type Check<T> = T extends string ? string : number;let result: Check<boolean>;  // 类型为 number

使用场景:根据传入类型进行动态类型推断,如基于某种逻辑条件为不同类型定义。

5. 映射类型(Mapped Types)

用于将一个对象类型中的所有属性变换为另一种类型。

type Readonly<T> = { readonly [P in keyof T]: T[P] };interface Person {name: string;age: number;
}type ReadonlyPerson = Readonly<Person>;

使用场景:用于根据现有类型创建新类型,常用于属性操作,比如将对象所有属性设为只读。

6. 索引类型(Index Types)

索引类型允许通过键名来查询对象属性类型。

type PersonKeys = keyof Person;  // "name" | "age"
let key: PersonKeys = "name";

使用场景:当需要动态地访问对象的属性时,这在对象键名的安全访问场景中非常有用。

7. 类型推断(Type Inference)

TypeScript 能自动推断出变量或返回值的类型。

let name = "John";  // TypeScript 自动推断为 string

使用场景:帮助减少显式类型声明,尤其在简单类型和推断明确时。

8. PartialRequired 工具类型

Partial 将对象类型的所有属性变为可选,Required 则将属性设为必填。

interface Task {title: string;description?: string;
}let updateTask: Partial<Task> = { title: "Update" };

使用场景:在构建需要部分属性更新或强制所有属性填写的对象时非常有用。

9. PickOmit 工具类型

Pick 从类型中挑选特定属性,Omit 则排除某些属性。

type TaskPreview = Pick<Task, "title">;  // 只选 title 属性
type TaskPreviewWithoutDesc = Omit<Task, "description">;  // 去除 description 属性

使用场景:在操作对象类型时,如 API 设计中仅返回或修改部分属性。

10. Record 类型

Record 构造一个类型,键是某种类型,值是另一种类型。

type NameAgeMap = Record<string, number>;
let peopleAges: NameAgeMap = { John: 25, Alice: 30 };

使用场景:用于表示键值对集合的对象类型,如字典或映射表。


总结

TypeScript 的高级类型提供了灵活的方式来描述复杂的类型关系,使代码更具表达力和安全性。在实际开发中,常见的使用场景包括数据结构的变换、工具函数的编写、复杂对象的类型定义等。通过使用这些高级类型,可以编写更健壮、可复用的代码。


http://www.mrgr.cn/news/63815.html

相关文章:

  • 无需手动部署的正式版comfyUI是否就此收费?开源等同免费?
  • 在工作中常用到的 Linux 命令总结
  • 模型剪枝,如何把模型的使用成本降下来?
  • npm入门教程5:package.json
  • .net core中间件Polly
  • Matplotlib 网格线
  • 如何在Linux下部署自己的ZFile开源网盘
  • 使用MongoDB Atlas构建无服务器数据库
  • CentOS下载ISO镜像的方法
  • CF983(div2)(未补)
  • Ubuntu软件包管理机制
  • PyTorch实践-CNN-鸢尾花分类
  • 资深项目经理推荐的这五款国产项目管理软件值得收藏使用
  • Kotlin一之内置类型
  • 【数据结构】构造函数和析构函数
  • Linux 进程间通信——管道
  • 问答系统评估标准
  • 安装scrcpy-client模块av模块异常,环境问题解决方案
  • leetcode hot100【LeetCode 279. 完全平方数】java实现
  • Pandas JSON学习
  • 遥感辐射传输方程中的格林函数
  • PyTorch实践-CNN-手写数字识别
  • [Web安全 网络安全]-学习视频分享汇总(持续更新中)
  • 论文概览 |《Journal of Transport Geography》2024.10 Vol.120
  • Android文件选择器[超级轻量级FilePicker测试没有问题][挣扎解决自带文件管理器获取不到绝对地址问题而是返回msf%3A1000038197]
  • 二叉树的深搜