TypeScript 的 Pick 类型辅助工具

TypeScript 的 Pick 类型辅助工具用于从一个类型中选择特定的属性,从而创建一个新类型。它允许你从一个现有的类型中“挑选”出某些属性,形成一个新的子集类型。

语法

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

作用

Pick 的主要作用是从一个复杂的类型中提取出指定的属性,形成一个新的类型。这在以下场景中非常有用:

  • 你需要从一个大类型中提取部分属性来定义一个新的接口或类型

  • 你希望减少代码重复,避免手动定义新的类型。

  • 你在处理函数参数或返回值时,只需要部分属性。

示例

假设我们有一个 User 类型:

interface User {
    id: number;
    name: string;
    age: number;
    email: string;
}

如果我们只想提取 idname 这两个属性,可以使用 Pick

type UserSubset = Pick<User, 'id' | 'name'>;

// 等价于
interface UserSubset {
    id: number;
    name: string;
}

使用场景

假设你有一个函数,它只需要 User 类型中的部分属性作为参数:

function logUserInfo(user: Pick<User, 'id' | 'name'>) {
    console.log(`User ID: ${user.id}, Name: ${user.name}`);
}

// 调用
const user: User = { id: 1, name: 'Alice', age: 30, email: 'alice@example.com' };
logUserInfo({ id: user.id, name: user.name });

通过 Pick,你可以避免手动定义一个新的接口,同时保持代码的简洁性和可维护性。

备注:

在 TypeScript 的 Pick<User, 'id' | 'name'> 中,| 符号是类型联合运算符。它用于指定从 User 类型中选择的属性名的联合类型,即选择 'id''name' 这两个属性。

如果要联合三个属性,可以使用 'id' | 'name' | 'age'。在 TypeScript 中,| 符号用于定义联合类型,表示类型可以是多个值中的任意一个。因此,'id' | 'name' | 'age' 表示类型可以是 'id'、'name' 或 'age' 中的任意一个

作用

| 符号在这里的作用是定义一个联合类型,表示从 User 类型中挑选出的属性名可以是 'id''name' 中的任意一个。Pick 类型辅助工具会根据这个联合类型创建一个新的类型,该类型只包含 User 类型中被选中的属性。

示例

假设我们有一个 User 类型:

interface User {
    id: number;
    name: string;
    age: number;
    email: string;
}

使用 Pick<User, 'id' | 'name'> 会创建一个新类型,该类型只包含 User 类型中的 idname 属性:

type UserSubset = Pick<User, 'id' | 'name'>;

// 等价于
interface UserSubset {
    id: number;
    name: string;
}

解释

  • Pick<User, 'id' | 'name'> 中的 'id' | 'name' 是一个联合类型,表示选择 User 类型中的 idname 属性。

  • Pick 会根据这个联合类型创建一个新的类型,该类型只包含被选中的属性。

使用场景

当你需要从一个复杂的类型中提取部分属性来定义一个新的类型时,Pick 和联合类型 | 非常有用。例如:

function logUserInfo(user: Pick<User, 'id' | 'name'>) {
    console.log(`User ID: ${user.id}, Name: ${user.name}`);
}

// 调用
const user: User = { id: 1, name: 'Alice', age: 30, email: 'alice@example.com' };
logUserInfo({ id: user.id, name: user.name });

在这个例子中,logUserInfo 函数只需要 User 类型中的 idname 属性,因此使用 Pick<User, 'id' | 'name'> 来定义参数类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值