基础使用:
// 泛型function echo<T>(arg: T): T {return arg}const result = echo(123)// 定义占位符<T,U> 然后去使用function swap<T, U>(tuple: [T, U]): [U, T] {return [tuple[1], tuple[0]]}
约束泛型:extends
interface IWithLength {length: number}function echoWithLength<T extends IWithLength>(arg: T): T {console.log(arg.length)return arg}const echoLength = echoWithLength({ a: 1, length: 1 })const strLength = echoWithLength('1231')const arrLength = echoWithLength([1,2])//const numLength = echoWithLength(123) //报错了
类的泛型
class Queue<T>{private list = []push(item:T){return this.list.push(item)}pop():T{return this.list.shift()}}const queue1 = new Queue<number>()queue1.push(1)console.log(queue1.pop().toFixed())const queue2 = new Queue<string>()queue2.push('123asd')console.log(queue2.pop().length)
接口泛型
interface keyPair<T, U> {key: T,value: U}let kp1: keyPair<string, number> = { key: 'str', value: 1 }let kp2: keyPair<number, string> = { key: 123, value: "" }let arr1: number[] = [2, 3, 4]let arr2: Array<number> = [2, 3]interface Iplus {(num1: number, num2: number): number}function plus(num1: number, num2: number): number {return num1 + num2}const num3: Iplus = plusinterface same<T> {(num1: T, num2: T): T}function add(num1: number, num2: number): number {return num1 + num2}function connect(num1: string, num2: string): string {return num1 + num2}const a:same<number> = addconst b:same<string> = connect
