前端 TypeScript 面试题, 什么是 TypeScript 的映射类型?
前端 TypeScript 面试题, 什么是 TypeScript 的映射类型?
QA
Step 1
Q:: 什么是 TypeScript 的映射类型?
A:: 映射类型(Mapped Types)是 TypeScript 中的一种高级类型,用于根据已有的类型创建一个新类型。映射类型的语法类似于 JavaScript 的对象遍历,允许我们通过在现有类型的每个属性上进行转换来生成一个新类型。常见的映射类型有 Partial
、Readonly
、Record
等。例如:type Readonly<T> = { readonly [P in keyof T]: T[P]; }
这个映射类型可以将所有属性设置为只读。
Step 2
Q:: TypeScript 中如何使用 Partial 映射类型?
A:: Partial 是 TypeScript 提供的一个内置映射类型,用来将一个对象类型的所有属性都变为可选的。用法示例:type PartialPerson = Partial<Person>;
,其中 Person
是一个对象类型,这样 PartialPerson
的属性都变成可选的。Partial 类型在处理某些可选的配置对象时非常有用。
Step 3
Q:: TypeScript 中的 Record 映射类型的作用是什么?
A:: Record 是 TypeScript 中另一个常见的映射类型,它用于将一种类型的属性键映射到另一种类型。其基本使用方法为:Record<Keys, Type>
,其中 Keys
是要映射的键类型,Type
是映射后的值类型。比如:type StringRecord = Record<string, number>;
这样就创建了一个对象类型,所有的字符串键都映射到 number
类型的值。
Step 4
Q:: 如何在 TypeScript 中使用映射类型创建一个深层可选类型?
A:: 可以通过递归的方式创建一个深层可选类型(DeepPartial),让对象类型的所有属性及其嵌套属性都变为可选。实现如下:type DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P]; };
这个类型在复杂对象的更新场景中非常有用,因为你不需要提供完整的对象树,只需要提供需要更新的部分。