前端面试题137(在TypeScript中如何利用映射类型(Mapped Types)来实现类型之间的转换,并给出一个例子)

在这里插入图片描述
映射类型(Mapped Types)是 TypeScript 中一种强大的类型工具,它允许你基于现有类型创建新的类型。映射类型通过使用关键字 keyof 和类型属性来创建新的类型,同时可以修改这些属性的类型或可选性等。这对于创建类型之间的转换非常有用。

映射类型的基本语法

映射类型的定义通常包含以下元素:

  1. 关键字 typeinterface:用于定义新类型。
  2. 类型参数:通常用 T 表示,它是映射的基础类型。
  3. { [P in K]: ... } 形式的属性:这里 K 是类型 T 的键的集合,P 是这些键中的每一个。
  4. 属性签名:可以改变原始属性的类型、可选性等。

示例:实现只读属性的转换

假设我们有一个对象类型 Person,我们想要创建一个新的类型 ReadOnlyPerson,其中所有的属性都是只读的。我们可以使用映射类型来实现这一目标。

步骤 1: 定义基础类型

首先,我们需要定义一个 Person 类型,它包含一些属性:

type Person = {
  name: string;
  age: number;
  location: string;
};
步骤 2: 创建映射类型

接下来,我们使用映射类型来创建 ReadOnlyPerson 类型。在这个映射类型中,我们将遍历 Person 类型的所有属性,并将它们标记为只读。

type ReadOnly<T> = {
  readonly [P in keyof T]: T[P];
};

这里的 ReadOnly<T> 类型接收一个类型参数 T。对于 T 类型中的每一个属性 P,我们在新类型中定义一个只读属性 readonly [P in keyof T]: T[P];。这意味着新类型将包含与原类型相同的属性,但是这些属性都是只读的。

步骤 3: 应用映射类型

现在我们可以使用这个映射类型来创建 ReadOnlyPerson 类型了:

type ReadOnlyPerson = ReadOnly<Person>;
步骤 4: 测试类型

让我们创建一个 Person 类型的实例,并将其转换为 ReadOnlyPerson 类型,然后尝试修改它的属性以验证是否成功实现了只读:

const person: Person = {
  name: 'Alice',
  age: 30,
  location: 'New York'
};

const readOnlyPerson: ReadOnlyPerson = person;

// 尝试修改只读属性,应该报错
readOnlyPerson.name = 'Bob'; // 编译错误: Cannot assign to 'name' because it is a read-only property.

在这个例子中,我们定义了一个 Person 类型,并使用映射类型 ReadOnly<T> 来创建了一个 ReadOnlyPerson 类型。当尝试修改 readOnlyPerson 的属性时,TypeScript 报告了一个编译错误,表明属性是只读的。

总结

通过使用映射类型,我们可以轻松地基于现有的类型创建新的类型,并且能够对属性进行转换。在本例中,我们通过将属性标记为只读来创建了一个只读版本的对象类型。这种方法同样可以应用于其他场景,例如改变属性的可选性、添加或移除特定属性等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GIS-CL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值