Typescript的高级tricks(in,keyof,Partial,Pick,Exclude等)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Typescript的高级tricks(in,keyof,Partial,Pick,Exclude等)相关的知识,希望对你有一定的参考价值。
Typescript的高级tricks
1.in keyof
1.1 keyof
keyof
与 Object.keys
略有相似,只不过 keyof
取 interface
的键
interface Point
x: number;
y: number;
// type keys = "x" | "y"
type keys = keyof Point;
假设有一个 object
如下所示,我们需要使用 typescript
实现一个 get
函数来获取它的属性值
const data =
a: 3,
hello: 'world'
function get(o: object, name: string)
return o[name]
我们刚开始可能会这么写,不过它有很多缺点
- 无法确认返回类型:这将损失
ts
最大的类型校验功能 - 无法对
key
做约束:可能会犯拼写错误的问题
这时可以使用 keyof
来加强 get
函数的类型功能
function get<T extends object, K extends keyof T>(o: T, name: K): T[K]
return o[name]
1.2 in
in
则可以遍历枚举类型,例如
type Keys = "a" | "b"
type Obj =
[p in Keys]: any
// -> a: any, b: any
keyof
产生枚举类型,,in
使用枚举类型遍历,所以他们经常一起使用,看下 Partial 源码
type Partial<T> = [P in keyof T]?: T[P] ;
上面语句的意思是 keyof T
拿到 T
所有属性名,然后 in
进行遍历,将值赋给 P,最后 T[P]
取得相应属性的值
2. Required& Partial& Pick
Required 相当于全部属性都是非空的
Partial 全部属性都是可选的
Pick相当于选取某个接口的子keys集合
type Required<T> =
[P in keyof T]-?: T[P];
;
type Partial<T> =
[P in keyof T]?: T[P];
;
type Pick<T, K extends keyof T> =
[P in K]: T[P];
;
interface User
id: number;
age: number;
name: string;
;
// 相当于: type PartialUser = id?: number; age?: number; name?: string;
type PartialUser = Partial<User>
// 相当于: type PickUser = id: number; age: number;
type PickUser = Pick<User, "id" | "age">
4. never& Exclude& Omit
type Exclude<T, U> = T extends U ? never : T;
// 相当于: type A = 'a'
type A = Exclude<'x' | 'a', 'x' | 'y' | 'z'>
结合 Exclude
可以推出 Omit
的写法
type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
interface User
id: number;
age: number;
name: string;
;
// 相当于: type PickUser = age: number; name: string;
type OmitUser = Omit<User, "id">
Omit 和Exclude 的区别貌似是 Omit作用于struct,Exclude 作用于集合qwq
5. interface & type的区别
一般来说,interface
与 type
区别很小,比如以下两种写法差不多
interface A
a: number;
b: number;
;
type B =
a: number;
b: number;
其中 interface
可以如下合并多个,而 type
只能使用 &
类进行连接
interface A
a: number;
interface A
b: number;
const a: A =
a: 3,
b: 4
6.参考文章
以上是关于Typescript的高级tricks(in,keyof,Partial,Pick,Exclude等)的主要内容,如果未能解决你的问题,请参考以下文章
Chrome DevTools: Color tricks in the Elements Panel
Enter Query Mode Search Tricks Using Enter_Query Built-in in Oracle Forms
css 垂直居中http://css-tricks.com/centering-in-the-unknown/
Tips and tricks for color formatting in Power BI
javascript https://levelup.gitconnected.com/9-tricks-for-kickass-javascript-developers-in-2019-eb01d
html 使HTML5元素在旧IE中运行 - 来自http://css-tricks.com/snippets/javascript/make-html5-elements-work-in-old-i