我们将研究打字稿的仿制药,探索它们是什么,为什么要使用它们以及如何发挥其全部潜力。让我们开始吧! ð
什么是TypeScript通用物?
在其核心上,打字稿通用物提供了一种创建可重复使用的类型安全组件的方法。它们允许您编写功能,类和接口,而无需承诺特定数据类型。相反,您可以使用占位符(通常由T
,U
或其他描述性名称表示),在使用通用组件时将被实际类型替换。
function identity<T>(arg: T): T {
return arg;
}
T
是一个通用类型参数。当您致电identity(42)
时,打字稿INVERS应该是T
为number
。当您致电identity("Hello")
时,T
将变为string
。整洁,对吗? ð
为什么要使用打字稿仿制药?
-
类型安全:仿制药确保您的代码是类型安全的。他们在编译时捕获与类型相关的错误,使您免于运行时头痛。
-
可重用性:仿制药促进代码重复使用。您可以创建与多种类型一起使用的功能和类,从而减少重复。
-
灵活性:仿制药可以使您灵活地使用不同的数据结构,而无需牺牲类型的安全性。思考阵列,链接列表,树或自定义数据结构。
-
IDE支持:打字稿的IDE支持是一流的。使用仿制药,您的代码编辑器可以提供智能建议和自动完成。
如何使用打字稿仿制药
功能
function reverseArray<T>(arr: T[]): T[] {
return arr.reverse();
}
您可以使用任何数组类型调用此功能。
const numbers = [1, 2, 3];
const reversedNumbers = reverseArray(numbers);
const fruits = ["apple", "banana", "cherry"];
const reversedFruits = reverseArray(fruits);
课程
仿制药不仅限于功能。您也可以将它们与课程一起使用。想象创建一个Stack
类:
class Stack<T> {
private elements: T[] = [];
push(item: T) {
this.elements.push(item);
}
pop(): T | undefined {
return this.elements.pop();
}
}
此Stack
类可以与任何数据类型一起使用:
const numberStack = new Stack<number>();
numberStack.push(1);
numberStack.push(2);
const poppedNumber = numberStack.pop();
const stringStack = new Stack<string>();
stringStack.push("hello");
stringStack.push("world");
const poppedString = stringStack.pop();
约束
有时您想缩小可以与仿制药一起使用的类型。您可以使用约束来执行此操作。例如,您可能需要创建一个仅与具有length
属性的对象一起工作的函数。
function getLength<T extends { length: number }>(obj: T): number {
return obj.length;
}
现在,您不能仅使用任何类型的getLength
;它必须具有length
属性。
const array = [1, 2, 3];
getLength(array); // Works
const str = "Hello";
getLength(str); // Works
const num = 42;
getLength(num); // Error: 'length' does not exist on type 'number'