软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

占位符

在ts中,如果要使用泛型,首先需要定义一个占位符,占位符的名字任意

function fn<T>(a: T, b: T): Array<T> {
	return [a, b]
}

fn(1, 2) // number 类型
fn(false, true) // boolean类型

这里,我们为函数构造了一个泛型,参数和返回值都为泛型

那么当我们向函数传递参数时,泛型 T 就会自动被推断为传递的参数的类型

type使用泛型

先构造type的泛型T,在下面使用type时,传入boolean,其泛型变为布尔类型

type A<T> = string | number | T

let a:A<boolean> = true

interface使用泛型

interface Data<T> {
	msg: T
}

let data: Data<number> = {
	msg: 1
}

使用多个泛型

ts还支持使用多个泛型

function printer<T, K>(a: T, b: K): Array<T | K> {
	return [a. b]
}

printer(1, false )

泛型约束

用于控制泛型类型的范围

function add<T extends number>(a:T, b:T) {
	return a + b;
}

这里,泛型的类型范围为number