TypeScript,类型映射 (Mapped Types)

类型映射(Mapped Types)是 TypeScript 中的一种强大的工具,允许开发者通过遍历已有类型的每个属性并创建新的类型。它主要使用映射类型语法,结合索引类型和 keyof 操作符,能够轻松地生成新的类型,使得代码更加灵活和可维护。

以下是一个简单的例子,演示了如何使用类型映射创建一个只读版本的接口:

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

type ReadonlyPerson = {
  readonly [K in keyof Person]: Person[K];
};

const person: ReadonlyPerson = {
  name: "John",
  age: 30,
};

// 以下操作会导致编译错误
// person.name = "Alice";
// person.age = 25;

在这个例子中,通过使用 { readonly [K in keyof Person]: Person[K] } 的语法,我们创建了一个新的类型 ReadonlyPerson,它具有与 Person 相同的属性,但所有属性都是只读的。这种方式避免了在每个属性上手动添加 readonly 修饰符的重复工作。

基本的映射类型语法

下面是一些常见的映射类型语法和用法:

只读属性映射类型

type Readonly<T> = {
  readonly [K in keyof T]: T[K];
};

可选属性映射类型

type Partial<T> = {
  [K in keyof T]?: T[K];
};

移除属性映射类型

type Omit<T, K extends keyof T> = {
  [P in Exclude<keyof T, K>]: T[P];
};

选取属性映射类型

type Pick<T, K extends keyof T> = {
  [P in K]: T[P];
};

高级映射类型

除了基本的映射类型语法外,还可以结合条件类型和其他高级类型来创建更复杂的映射类型。

type NullableProperties<T> = {
  [K in keyof T]: null extends T[K] ? K : never;
};

type NullableKeys<T> = NullableProperties<T>[keyof T];

在这个例子中,NullableKeys<T> 返回了类型 T 中所有值为 null 的属性的键的联合类型。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值