TS泛型
代表广泛的类型
function identity<T>(arg:T):T{
return arg
}
let string = identity('hi')
接口使用泛型
function returnIt<T>(arg: T): T {
return arg
}
interface Human {
name: string
age: number
}
let human = returnIt<Human>({ name: 'tom', age: 18 })
数组泛型
interface Human {
name: string
age: number
}
function returnArray<T>(array: T[]): T[] {
return array
}
let array = returnArray<string>(['a', 'b', 'c'])
let humanArray = returnArray<Human>([{ name: 'tom', age: 18 }, { name: 'jack', age: 19 }])
泛型类型
function returnIt<T>(arg: T): T {
return arg
}
let myReturnIt: <T>(arg: T) => T = returnIt
let myReturnIt2: { <T>(arg: T): T } = returnIt
泛型接口
interface AnyAdd<T> {
(a1: T, b1: T): T
}
let numberAdd: AnyAdd<number> = (a1: number, b1: number): number => {
return a1 + b1
}
let stringAdd: AnyAdd<string> = (a2: string, b2: string): string => {
return a2 + b2
}
泛型约束
满足某些条件的约束
假如这样写,会报错,因为不一定有length,那么我们需要对泛型进行约束
function returnIt<T>(arg: T): T {
console.log(arg.length) //这里报错
return arg
}
引用接口,找到约束的类型
interface hasLength {
length: number
}
function returnIt<T extends hasLength>(arg: T): T {//T继承接口hasLength
console.log(arg.length)
return arg
}
在泛型里使用类
function create<T>(c: { new(): T }): T {
return new c()
}
看不懂?那先转化为js代码
function create(c) {
return new c()
}
function create<T>(c: { new(): T }): T {
return new c()
}
class Human {
}
class Animal {
}
let tom = create<Human>(Human)
let jack = create<Human>(Animal) //报错,因为是Human
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 Roxas Deng的博客!