【typescript进阶篇】(第三章) 常用高级类型

Typescript 中常用的高级类型

在 typescript (后面简称为 ts)中定义 interface(后面简称为“接口”) 时,常常需要对进行二次封装或调整,而 ts 在2.1版本中加入了一些程序类型工具,供开发者方便的进行此类操作。

备注:这些程序类型仅限制用于 type 类型声明中。

Record

以 typeof 格式快速创建一个类型,此类型包含一组指定的属性且都是必填。

/**
 * 源码
 */
type Record<K extends keyof any, T> = {
    [P in K]: T;
};

// 使用
type Coord = Record<'x' | 'y', number>;

// 等同于
type Coord = {
	x: number;
	y: number;
}

具体的复杂业务场景中,一般会接口 Pick 、Partial 等组合使用,从而过滤和重组出新的类型定义。

Partial

将类型定义的所有属性都修改为可选。

/**
 * 源码
 */
type Partial<T> = {
    [P in keyof T]?: T[P];
};
// 使用
type Coord = Partial<Record<'x' | 'y', number>>;

// 等同于
type Coord = {
	x?: number;
	y?: number;
}

Readonly

不管是从字面意思,还是定义上都很好理解:将所有属性定义为只读。

/**
 * 源码
 */
type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};
// 使用
type Coord = Readonly<Record<'x' | 'y', number>>;

// 等同于
type Coord = {
    readonly x: number;
    readonly y: number;
}

// 如果进行了修改,则会报错:
const c: Coord = { x: 1, y: 1 };
c.x = 2; // Error: Cannot assign to 'x' because it is a read-only property.

Pick

/**
 * 源码
 */
type Pick<T, K extends keyof T> = {
    [P in K]: T[P];
};
// 使用
type Coord = Record<'x' | 'y', number>;
type CoordX = Pick<Coord, 'x'>;

// 等用于
type CoordX = {
	x: number;
}

更多

附上typescrript其余的高级类型:TypeScript 的所有 高级类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值