今天学习到了ts中的一些内置工具,虽然在开发中使用的不多,但是了解一下并且通过做类型体操把它实现能很大程度的提升对ts中类型的使用。直接上代码。
1.内置工具Partial
作用:用于构造一个Type下面的所有属性都设置为可选值
interface IKUN{
name:string
age:number
slogan?:string
}
type IKUNOptional = Partial<IKUN>
type MyRartial<T> = {
[P in keyof T]?: T[P]
}
export{}
2.内置工具Required
作用:用于构造一个Type下面的所有属性都设置为必选值
interface IKUN{
name?:string
age?:number
slogan?:string
}
type IKUNOptional =Required<IKUN>
type MyRequired<T> = {
[P in keyof T]: T[P]
}
export{}
3.内置工具readonly
作用:用于构造一个Type下面的所有属性都设置为仅可读
interface IKUN{
name?:string
age?:number
slogan?:string
}
type IKUNOptional =Required<IKUN>
type Myreadonly<T> = {
readonly [P in keyof T]: T[P]
}
export{}
4.内置工具Record
作用:用于构造一个对象类型,他的所有的key都是keys类型,value都是Type类型 Record<keys,Type>.
interface IKUN{
name?:string
age?:number
slogan?:string
}
type t1 = "上海"|"北京"
type IKUNs=Record<t1,IKUN>
const ikun:IKUNs={
"上海":{
name:"bb",
age:20,
},
"北京":{
name:"aa",
age:20,
}
}
type MyRecord<Keys extends keyof any,T> ={
[P in Keys]:T
}
5.内置工具Pick
作用:于构造一个类型,它是从Type类型中挑选一些属性keys
interface IKUN{
name?:string
age?:number
slogan?:string
}
type IKUNOptional =Pick<IKUN,'age'|'slogan'>
type MyPick<T,K extends keyof T>={
[P in K]:T[P]
}
type IKUNOptional1 =MyPick<IKUN,'age'|'slogan'>
6.内置工具Omit
作用:用于构造一个类型,它是从Type类型中过滤一些属性keys
interface IKUN{
name?:string
age?:number
slogan?:string
}
type IKUNOptional =Omit<IKUN,'age'|'slogan'>
type MyOmit<T,K extends keyof T>={
[P in keyof T as P extends K? never:P]:T[P]
}
7.内置工具Exclude
作用:用于构造一个类型,它是从UnionType联合类型中排除了所有可以赋值给ExcludeMembers的类型
type IKUN = "唱"|"跳"|"RAP"
type IKUNOptional =Exclude<IKUN,'唱'|'跳'>
type MyExclude<T,E>= T extends E?never:T
8.内置工具Extract
作用:用于构造一个类型,它是从UnionType联合类型中提取了所有可以赋值给ExcludeMembers的类型
type IKUN = "唱"|"跳"|"RAP"
type IKUNOptional =Extract<IKUN,'唱'|'跳'>
type MyExtract<T,E>= T extends E?T:never
9.内置工具NonNullable
作用:NonNullable`<type>` 用于构造一个类型,这个类型从type中排除了所有的null、undefined类型
type IKUN = "唱"|"跳"|"RAP"|null|undefined
type IKUNOptional =NonNullable<IKUN>
type MyNonNullable<T>= T extends null|undefined ?never:T
10.内置工具 ReturnType/R
作用:获取函数的返回值类型
type CalcFnType = (num1: number, num2: number)=>number
function foo(){
return "abc"
}
type CalReturnType = ReturnType<CalcFnType>
type FooReturnType = ReturnType<typeof foo>
type MyReturnType<T extends (...args:any[])=>any> = T extends (...args:any[])=> infer R? R:never
11.内置工具InstanceType
作用: 用于构造一个由所有Type的构造函数的实例类型组成的类型
class Person{}
class Dog{}
type MyPerson = InstanceType<typeof Person>
const p2:MyPerson = new Person()
function factory<T extends new (...args:any[]) => any >(ctor:T):InstanceType<T>{
return new ctor()
}
const p3 = factory(Person)
type MyInstanceType<T extends new (...args:any[]) => any > = T extends new (...args:any[])=>infer R ? R:never