6、深入掌握TS

文章介绍了TypeScript中的条件类型,如`infer`关键字用于推断泛型函数的返回类型,以及`Extract`,`Exclude`,`Record`,`Pick`,`Omit`,`Required`,`Partial`和`Readonly`等类型操作。这些工具类型允许开发者更精细地控制和操作接口和泛型。
摘要由CSDN通过智能技术生成

infer

表示在extends条件语句中以占位符出现等到使用时才推断出来的数据类型

interface Customer {
	custname: string,
	buymoney: number
}
type CustFn = (params:Customer)=> string
type custParaTyp = CustFn extends (params: any) => infer R? R : CustFn


// 运用在泛型
type ParamsTyp<T> = T extends (params: any) => infer R ? R :never 
type CustParaTyp = ParamsTyp<CustFn> // string

type EleOfArr<T> = T extends Array<infer P> ? P :never
type EleOfArrTest = EleOfArr<Array<number>> // number

TS 条件类型

// never 整体比较
type Test = string|number |boolean extends string |number ? string : never 

// 泛型迭代比较
type CondTyp<T> = T extends string |number ?T:never 
type Test2 = CondTyp<string |number | boolean> // string | number

Extract

// type Extract<T, U> = T extends U ? T : never
type TestExtract1 = Extract<string, string | number> // string
type TestExtract2 = Extract<string |number |boolean, string |number> // string | number 迭代比较

Exclude

// type Exclude<T, U> = T extends U ? never : T
type TextExclude1 = Exclude<string, string | number> // never
type TextExclude2 = Exclude<string | number| boolean, string|number>// boolean

Record


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

type O = Record<string | number | symbol, any>
// key of any -> string | number | symbol
// P in K -> 迭代效果

Pick

抓取type类型,接口,类中的属性组成的一个新的对象类型

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

TS in 类型(映射类型)

type Omit1<T, K extends keyof T> = {
	[P in keyof T as P extends K?never:P]:T[P]
}
type Omit2<T, K extends keyof T> = {
	[P in keyof T as Exclude<P, K>]:T[P]
}

Required

去掉可选属性

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

Partial

全部转成可选属性

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

Readonly

不允许修改属性

type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};

// 去掉只读属性
type Readonly<T> = {
    - readonly [P in keyof T]: T[P];
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值