返回
TypeScript 面试题:巧用映射类型和 never 提取对象中特定属性
前端
2023-09-27 12:21:50
引言
TypeScript 作为一门流行的前端语言,在面试中经常会遇到各种各样的题目。其中一道经典的面试题就是如何从对象中提取特定的属性。这道题看似简单,但它考验的是对 TypeScript 语言的深入理解和灵活运用。
映射类型
映射类型是 TypeScript 中一种强大的工具,它允许我们定义新的类型,该类型是现有类型的子集。映射类型可以使用 type
定义,其语法如下:
type NewType = {
[Property in KeyType]: ValueType;
};
其中,KeyType
是要映射的属性的类型,ValueType
是要映射的值的类型。
never 类型
never
类型是 TypeScript 中一个特殊的类型,它表示不可能发生的值。never
类型可以用来表示函数的返回值永远不会返回,或者对象永远不会具有某些属性。
巧妙运用映射类型和 never 提取对象中特定属性
现在,让我们来看一道经典的 TypeScript 面试题:
interface Person {
name: string;
age: number;
gender: string;
city: string;
}
// 从 Person 接口中提取 name 和 age 属性
type PickNameAndAge = {};
题目要求我们从 Person
接口中提取 name
和 age
属性。我们可以使用映射类型和 never
类型来实现:
type PickNameAndAge = {
[Property in keyof Person]: Property extends "name" | "age" ? Person[Property] : never;
};
在这个映射类型中,我们使用了 keyof Person
来获取 Person
接口的所有属性名。然后,我们使用条件运算符 ?
来判断属性名是否为 "name"
或 "age"
。如果是,则返回属性的值;否则,返回 never
类型。
最后,我们对映射类型进行取值,得到一个新的类型 PickNameAndAge
,它只包含 name
和 age
两个属性。
总结
通过这篇文章,我们学习了如何巧妙地使用映射类型和 never
类型来从对象中提取特定的属性。这种技巧对于处理复杂的数据结构和优化代码很有帮助。希望这篇文章能够帮助读者更好地理解 TypeScript 的高级用法。
扩展阅读