Appearance
泛型
- 泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。
- 泛型的主要作用是增加代码的灵活性和可重用性,同时保持类型的安全性。
- 泛型的标识符可以是任意合法的标识符,常用标识符有
T、K、V、E、R等。
泛型的定义
- 泛型的定义使用尖括号
<>来表示,尖括号中可以包含一个或多个类型参数。
typescript
function identity<T>(arg: T): T {
return arg;
}
identity<string>('hello');标识符T
T代表type,表示类型参数。
typescript
function identity<T>(arg: T): T {
return arg;
}标识符K和V
K代表key,表示键的类型。V代表value,表示值的类型。
typescript
map1 = new Map<K, V>();标识符E
E代表element,表示数组元素的类型。
typescript
function printArray<E>(arr: E[]): void {
arr.forEach((item) => console.log(item));
}标识符R
R代表result,表示函数返回值的类型。
typescript
function getResult<R>(value: R): R {
return value;
}其他标识符U,S,P
U代表union,表示联合类型。S代表set,表示集合类型。P代表property,表示属性类型。
泛型约束
- 泛型约束可以限制泛型参数的类型范围,确保在使用泛型时符合预期的类型。
- 泛型约束使用
extends关键字来指定约束条件。 - 约束条件可以是具体的类型、接口、类等。
- 当泛型参数被约束时,只能使用约束条件中指定的类型。
typescript
// 基本语法
interface Lengthwise {
length: number;
}
// 约束条件是具体的类型
function getResult<T extends Lengthwise>(value: T): void {
console.log(arg.length);
}
getResult('hello'); // 5
getResult(43); // 错误,number类型没有length属性泛型默认值
- 泛型参数可以设置默认值,当调用函数时没有指定泛型参数时,将使用默认值。
- 泛型默认值使用
=来指定,格式为<T = 默认值>。
typescript
function getResult<T = string>(value: T): T {
return value;
}