前端面试题123(请解释一下什么是高级类型(Advanced Types)中的映射类型(Mapped Types)。如何在项目中使用它们的?)

在这里插入图片描述
映射类型(Mapped Types)是TypeScript中一种强大的高级类型特性,它允许你根据已存在的类型结构创建新的类型。映射类型通过遍历一个现有类型的属性,并对每个属性应用某种变换来生成一个新的类型。这在定义复杂的类型变换时特别有用,比如为对象的所有属性添加或改变修饰符、转换属性类型等。

基本语法

映射类型的语法结构如下:

type MappedType<T> = {
  [P in keyof T]: // 映射操作
    // 对T中每个键P进行处理的逻辑
};
  • T 是你要映射的基础类型。
  • [P in keyof T] 遍历T的所有键(属性名),并将每个键赋值给P
  • : 后面跟着的是基于P的类型变换表达式。

示例

假设我们有一个简单的接口User,我们想创建一个新的类型,该类型将所有属性都变成只读的。

interface User {
  name: string;
  age: number;
}

// 使用映射类型创建一个只读版本的User类型
type ReadonlyUser = {
  readonly [P in keyof User]: User[P];
};

const user: ReadonlyUser = { name: "Alice", age: 30 };
// user.name = "Bob"; // 错误,name是只读的

在这个例子中,ReadonlyUser就是一个映射类型,它遍历了User接口的所有属性,并且通过添加readonly关键字使每个属性变为只读。

实际应用场景

  1. 创建只读接口:如上例所示,可以方便地将任何接口转换为只读版本。
  2. 添加默认值:为接口的所有字符串或数字类型的属性添加默认值。
  3. 类型转换:比如将所有string类型转换为number类型(假设存在这样的转换逻辑)。
  4. 条件类型:结合条件类型,可以基于属性的类型进行更复杂的变换,比如保留某些类型而排除其他类型。

如何在项目中使用

在实际项目中,当你需要对现有的复杂类型进行一些模式化的修改时,映射类型就会非常有用。例如,在开发一个库时,你可能希望为所有传入的对象参数自动添加类型安全的校验,或者在创建Redux的action类型时,为每个动作类型自动添加一个类型标记等。

通过上述示例和说明,你应该对TypeScript中的映射类型有了基本的理解。在设计类型系统时合理利用映射类型,可以极大地提高代码的可维护性和类型安全性。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS-CL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值