文章目录
- Omit 的词源
- 词源分析
- 词源历史
- 在 TypeScript 中的用法
- 示例
- Pick
- 语法
- 示例
- 更复杂的示例
- 使用 `Pick` 和其他类型组合
- 实际应用场景
- Omit vs Pick
Omit 的词源
Omit
是一个英语词汇,它的意思是“省略”或“遗漏”。现在让我们来看看这个词的词源。
词源分析
- O-: 这是一个拉丁语前缀,表示“out of”或“from”。
- Mit-: 这部分来自于拉丁语词根
mittere
,意为“to send”或“to put”。 - -er: 这是一个动词词尾,表示“to do”。
因此,omit
的字面意思可以理解为“送出”或“放置出去”,在英语中演变为“省略”或“遗漏”的意思。
词源历史
- 拉丁语:
mittere
意为“to send”或“to put”。从这个根词派生出了许多英语词汇,如emit
(发出)、commit
(提交)等。 - 中古英语:
omit
最初出现在 15 世纪左右,源自古法语ommettre
,最终来源于拉丁语omittre
,这是一个由o-
和mittere
组成的词,意为“to leave out”或“to fail to do”。
在 TypeScript 中的用法
在 TypeScript 中,Omit<T, K>
是一个实用类型,用于从类型 T
中删除(省略)指定的属性 K
。这与英语词汇 omit
的含义紧密相关,即从一个对象类型中“省略”某些属性。
示例
假设我们有一个接口 Person
:
interface Person {name: string;age: number;email: string;
}
如果我们想要创建一个新的类型 PersonWithoutEmail
,该类型与 Person
相同,但不包含 email
属性,我们可以使用 Omit
类型:
type PersonWithoutEmail = Omit<Person, 'email'>;
在这个例子中,PersonWithoutEmail
类型将包含 Person
中的所有属性,除了 email
属性。
Pick
在 TypeScript 中,Pick<T, K>
是一个实用类型,用于从类型 T
中选择一组属性 K
,并创建一个新的类型,该类型仅包含这些被选择的属性及其类型。
语法
Pick<T, K>
T
是原始类型,通常是一个接口或类型。K
是从T
中选择的属性键的联合类型。
示例
假设我们有一个接口 Person
:
interface Person {name: string;age: number;address: string;phoneNumber: string;
}
如果我们想要创建一个新的类型 ContactInfo
,该类型仅包含 name
和 address
属性,我们可以使用 Pick
类型:
type ContactInfo = Pick<Person, 'name' | 'address'>;
在这个例子中,ContactInfo
类型将包含 name
和 address
属性,而其他属性将被排除。
更复杂的示例
假设我们有一个更复杂的接口 User
:
interface User {id: number;name: string;email: string;password: string;roles: string[];settings: {theme: string;notifications: boolean;};
}
我们想要创建一个新的类型 UserPublicInfo
,该类型仅包含 id
、name
和 email
属性:
type UserPublicInfo = Pick<User, 'id' | 'name' | 'email'>;
现在 UserPublicInfo
类型将只包含 id
、name
和 email
属性。
使用 Pick
和其他类型组合
Pick
类型可以与其他类型一起使用,例如与 Omit
、Partial
、Required
等类型结合使用,以创建更复杂的类型。
假设我们想要创建一个新的类型 UserWithSettings
,该类型包含 User
中的所有属性,但 settings
属性是必需的(即使在 User
中它是可选的):
type UserWithRequiredSettings = Pick<User, Exclude<keyof User, 'settings'>> & Required<Pick<User, 'settings'>>;
在这个例子中,我们使用 Exclude<keyof User, 'settings'>
来获取除了 settings
以外的所有属性键,然后使用 Pick
来选择这些属性。接着我们使用 Required
类型来确保 settings
属性是必需的。
实际应用场景
Pick
类型在实际开发中非常有用,尤其是在需要从一个大的接口中提取特定属性时。例如,假设你有一个 API 接口,需要向客户端返回用户信息的一部分:
interface User {id: number;name: string;email: string;password: string;roles: string[];settings: {theme: string;notifications: boolean;};
}function getUserPublicInfo(user: User): Pick<User, 'id' | 'name' | 'email'> {return {id: user.id,name: user.name,email: user.email,};
}
在这个例子中,getUserPublicInfo
函数返回一个新的对象,该对象仅包含 id
、name
和 email
属性,这有助于保护敏感信息,同时提供必要的用户信息。
Omit vs Pick
比较
目的:
Omit:用于从现有类型中排除某些属性。
Pick:用于从现有类型中选择某些属性。
结果:
Omit:创建一个不包含指定属性的新类型。
Pick:创建一个仅包含指定属性的新类型。
用法:
Omit:通常用于创建一个没有某些属性的新类型,这在需要排除某些敏感数据或不需要的字段时很有用。
Pick:通常用于创建一个包含特定属性的新类型,这在需要精简对象或传递特定属性集时非常有用。