做国外的网站,win7版本的wordpress,微信小程序认证费用,进一步加强舆情管控简介
泛型是指在定义函数、接口或类的时候#xff0c;不预先指定具体的类型#xff0c;而在使用的时候再指定类型的一种特性
作用
可以保证类型安全的前提下#xff0c;让函数、接口或类与多种类型一起工作#xff0c;从而实现复用
基本使用
举个例子#xff1a;
创…简介
泛型是指在定义函数、接口或类的时候不预先指定具体的类型而在使用的时候再指定类型的一种特性
作用
可以保证类型安全的前提下让函数、接口或类与多种类型一起工作从而实现复用
基本使用
举个例子
创建一个id函数、该函数传入什么数据就返回数据本身也就是参数和返回值类型相同。
function id(value:number): number {return value
}idnumber(99) // 99function id(value:string): string {return value
}idstring(hhh) // hhh综上所述、上面两个函数接收的类型是写死的只能传入相应的数据类型为了能让函数接口任意类型吗可以将参数类型改为any。但是这样就失去TS的类型保护类型不安全。
这时候泛型就能派上用场了。
function idT(value:T):T {return value
}idnumber(99) // 99
idstring(hhh) // hhh
idnumber[]([1,2,3]) // [1,2,3]在函数名称的后面添加其中尖括号里面的T就是类型参数它用来处理类型而不是值它可以是任意合法的变量名称因为T是类型因此可以将T作为参数和返回值的类型表示参数和返回值具有相同的类型由于TS内部会采用一种叫做类型参数推断的机制来根据传入的数据推断出相对应的类型针对一些基础数据类型可以省略不写。比如上述 idnumber(99)可直接写成id(99)、idstring(hhh)可简单写成id(hhh)。当编译器无法推断类型或者推断的类型不准确时就需要显式的传入类型参数。比如idnumber[]([1,2,3])。
单个类型参数 VS 多个类型参数
单个类型参数
function idT(value:T):T {return value
}
idnumber(99) // 99顾名思义类型参数只有一个如上只有一个 T
多个类型参数
function swapT, U(value: [T, U]): [U, T] {return [value[1], value[0]];
}swap([18, age]); // [age, 18]多个类型参数之间可进行相互约束
多类型变量之间还可以进行约束比如第二个类型变量所第一个类型变量约束。
function getProT, K extends keyof T (obj:T, key:K) {return obj[[key]
}getPro({name:abc,age:18},age)
getPro(abc,length)
getPro([a,b,c],length)
keyof 接收一个对象类型生成其键名称或数字的联合类型类型K受类型T的约束上述可以理解为K只能是T中所存在的键中任意一个或者说只能访问对象中存在的属性。
泛型约束
在函数内部使用泛型变量的时候由于事先不知道它是哪种类型所以导致无法访问它的属性和方法。如下
function idT(value:T):T {console.log(value.length) //这段代码编译器会报错Property length does not exist on type T. return value
}
上述代码中无法保证传入的数据一定存在length属性。所以就需要为泛型添加约束。(只允许这个函数传入那些包含 length 属性的变量)
指定更加具体的类型
function idT(value:T[]):T[] {console.log(value.length) return value
} 如上、可将T改成T[]也就是T类型的数组这样数组就一定存在lengh属性就可以正常访问了。
使用 extends 添加约束 interface TLength {length:number
}function idT extends TLength(value:T): T {console.log(value.length) return value
}id([xxx,yyy])
id(hhhhh)
id({length:10,name:abcd})创建描述约束的接口TLength,该接口提供length属性通过extends关键字使用该接口为泛型添加约束。
泛型接口
接口也可以配合泛型使用 泛型类 泛型工具类型
PartialType
用来创建一个类型将Type中的所有属性都设置为可选 ReadonlyType
用来创建一个类型将Type中的所有属性都设置为只读 PickType,Keys
从Type中选择一组属性来构造新类型 RecordKeys,Type
构造一个对象类型属性键为Keys属性类型为Type