typeScript

interface & type

相同点:
1、都可以对对象、函数、class做类型定义;
2、都可以进行类型扩展;
不同点:
1、interface扩展类型是通过使用extends继承,而type是使用&、| 符合进行类型合并;
2、interface可以重复声明类型,会进行合并,而type不能重复声明类型;
3、type可以给类型起别名;
4、type转换为interface方法:interface A extends B; interface转换为type方法:type B = A;
5、class可以通过implements实现interface;

typeof

typeof 可以获取实例的构造函数类型;

Class Person {}; 
const p = new Person(); // typeof p = Person

keyof

keyof 可以获取对象的键;

const obj = {
name: string;
age: number;
}
keyof obj; // 'name' | 'age'

extends

extends不仅可以表示继承,还可用于类型判断;

type MyType<T, U> = T extends U ? never : T; // 如果T中的类型是U的子集则不返回,否则返回

内置工具函数实现

内置工具函数有Partial、Pick、Omit、Extract、Exclude、Required等。
Partial:用于将属性变为可选,只能用于对象类型;
Pick、Extract:均用于选出部分想要的属性,但是Pick用于对象,Extract用于联合类型;
Omit、Exclude:均表示排除某些属性,但是Omit用于对象,Exclude用于联合类型;
Required:将属性变为必选;

// Partial
type MyPartial<T> = {
[k in keyof T]?: T[k]; 
// Pick
type MyPick<T, k extends keyof T> = {
[p in k] : T[p];
// Extract
type MyExtract<T, K> = T extends K ? never : T;
// Omit
type MyOmit<T,k> = Pick<T, Exclude<keyof T, k>>;
// Required
type MyRequired<T> = {
[k in keyof T]-?: T[k]; 

泛型

上述实现过程中使用到了泛型,具体讲解文章:typescript泛型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值