概述
in和keyof是两个非常重要的操作符,它们允许开发者对对象的键(key)进行更精细化的操作和约束- in 关键词
- in关键词则在TypeScript的类型上下文中有特定的用途,它用于映射类型和类型查询
- 当与keyof一起使用时,in可以遍历一个类型的所有键,并在类型层次上进行操作
- 比如创建新的类型映射类型、条件判断或是泛型约束
- keyof 关键词
- keyof T是一个类型查询操作符,其中T是一个类型
- 它返回一个联合类型,该联合类型包含了T所有公开属性的键(即属性名)
- 这在TypeScript中非常重要,因为它允许我们动态地基于一个类型来获取它的属性名集合
- 从而进行进一步的类型操作
- 应用场景
- 动态属性访问:在处理对象时,利用K in keyof T可以确保安全地遍历所有可能的属性,而不会引发运行时错误
- 类型转换:Readonly类型别名,将所有属性转为只读,是映射类型的一种经典应用
- API设计:在API设计中,通过K extends keyof约束泛型参数,可以精确地指定参数必须是对象的某个属性,增强了API的类型安全和易用性
- 配置管理:动态配置对象时,利用映射类型和条件类型可以方便地实现配置项的默认值设定、类型转换等,保持代码的灵活性和可维护性
in 操作符
- 在 TypeScript 中,in 操作符主要在类型守卫(type guard)和映射类型(mapped type)的上下文中使用
1 ) 类型守卫中的 in
- 在类型守卫中,in 用于检查一个对象是否具有特定的属性
- 这有助于在运行时确定对象的形状,并据此进行条件处理
示例
function processObject(obj: any) {
if ('name' in obj && 'age' in obj) {
console.log(`Name: ${
obj.name}, Age: ${
obj.age}`);
} else {
console.log('Object does not have name and age properties.');
}
}
- 在这个例子中,我们使用 in 操作符来检查 obj 是否具有 name 和 age 属性
2 )映射类型中的 in
- 在映射类型中,in 用于遍历一个类型的所有属性键,并对每个属性进行转换
- 这允许开发者创建一个新的类型,该类型基于现有类型的每个属性进行某种变换
- 例如,我们可以定义一个映射类型,将 Person 类型的所有属性都变为可选:
示例
type PartialPerson = {
[K in keyof Person]?: Person[K] };
- 在这个例子中,PartialPerson 类型将 Person 类型的所有属性都标记为可选
- 这是通过使用映射类型并结合 keyof 和 in 操作符来实现的
- 对于 Person 类型的每一个键 K,我们都定义了一个新的可选属性
- 其类型与原始 Person 类型中对应属性的类型相同
keyof 操作符
- keyof 操作符用于获取对象类型的所有键(key)的联合类型(union type)
- 这意味着,如果你有一个对象类型
- 你可以使用 keyof 来得到一个包含该对象所有键名称的字符串字面量类型的联合
示例
type Person = {
name: string;
age: number;
address: {
city: string;
state:
2197



被折叠的 条评论
为什么被折叠?



