第43天:仿制药
#javascript #typescript #100daysofcode #day43

我们将研究打字稿的仿制药,探索它们是什么,为什么要使用它们以及如何发挥其全部潜力。让我们开始吧! ð

什么是TypeScript通用物?

在其核心上,打字稿通用物提供了一种创建可重复使用的类型安全组件的方法。它们允许您编写功能,类和接口,而无需承诺特定数据类型。相反,您可以使用占位符(通常由TU或其他描述性名称表示),在使用通用组件时将被实际类型替换。

function identity<T>(arg: T): T {
    return arg;
}

T是一个通用类型参数。当您致电identity(42)时,打字稿INVERS应该是Tnumber。当您致电identity("Hello")时,T将变为string。整洁,对吗? ð

为什么要使用打字稿仿制药?

  1. 类型安全:仿制药确保您的代码是类型安全的。他们在编译时捕获与类型相关的错误,使您免于运行时头痛。

  2. 可重用性:仿制药促进代码重复使用。您可以创建与多种类型一起使用的功能和类,从而减少重复。

  3. 灵活性:仿制药可以使您灵活地使用不同的数据结构,而无需牺牲类型的安全性。思考阵列,链接列表,树或自定义数据结构。

  4. 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'