TS使用及一些工具方法学习

之前工作中对于ts的使用都是一些接口,泛型定义,继承之类的,某一天的突然想看看这些东西,才发现ts有这么多功能

declare 声明

 declare用来在.d.ts文件里面进行全局的声明

当开发项目中全局引入来一些模块或者方法之类,在其他页面使用ts会报错没有找到,这个时候需要再.d.ts的文件里面用declare来声明一下;

declare var dd: any; 

type与interface

type可用于给类型起新的名字,或者创建一些工具

type N = number;
type NS = number | string;
type IPartial<T> = { [K in keyof T]?: T[K] };

 interface 只能定义接口类型

type类型的合并使用 & 交叉

type Foo = {
  name: string;
}

type Too = Foo & {
  age: number;
};

 interface类型的合并需要是extends

interface Foo {
  name: string;
}

interface Too extends Foo {
  age: number;
};

extends

首先是extends,之前对于extends的理解就只是类型的继承,extends用于对类型的约束限制才更加合适

例如在用作接口继承时,可以理解为约束当前接口类型必须拥有继承对象的属性类型

下面这个是ts的条件类型,用extends判断K

再比如像下面Pick的实现,传入一个泛型,再传入一些属性值,用extends约束K的属性必须在T的约束范围内,

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

keyof & in

keyof 产生联合类型, in 则可以遍历枚举类型

Partial 把类型的所有属性变成可选

type Partial<T> = { [P in keyof T]?: T[P] | undefined; }

传入一个类型,keyof提取出所有key,用in循环 

Required 把类型的所有属性变成必选

type Required<T> = { [P in keyof T]-?: T[P]; }

 我们发现一个有意思的用法 -?, 这里很好理解就是将可选项代表的 ? 去掉

 Record 将类型中的所有属性转行为指定类型

type Record<K extends string | number | symbol, T> = { [P in K]: T; }

传入一个联合类型,再传入一个指定的类型,可以是接口类型等 

 Pick 从类型中抽取部分属性出来组成新的类型

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

 

Omit 找出类型A 不在类型B的属性 

type Omit<T, K extends string | number | symbol> = { [P in Exclude<keyof T, K>]: T[P]; }

这里用到了Exclude这个方法,这个方法可以过滤出类型A属性不在类型B中的那部分属性,然后用in循环,取出不在类型B的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值