23 泛型的使用 🌐之泛型与接口

在前一章中,我们探讨了如何定义泛型函数,这为我们使用泛型奠定了基础。在这一章节中,我们将深入了解 泛型接口 之间的关系,以及如何在接口中使用泛型来提高代码的灵活性与可重用性。

泛型接口的定义

泛型接口允许我们在定义接口时不指定具体的类型,而是使用类型参数。这样,接口就可以在实现时为特定的数据类型提供灵活性。

定义泛型接口

我们可以像下面这样定义一个泛型接口:

1
2
3
4
interface Pair<K, V> {
key: K;
value: V;
}

在这个例子中,Pair 接口有两个类型参数 KV,代表键和值的类型。

实现泛型接口

实现泛型接口时,我们可以使用特定的类型参数。例如,我们可以创建一个 numberstring 类型的键值对:

1
2
3
4
5
6
const numberStringPair: Pair<number, string> = {
key: 1,
value: "one"
};

console.log(numberStringPair); // { key: 1, value: "one" }

同样,我们也可以创建不同类型的键值对:

1
2
3
4
5
6
const stringBooleanPair: Pair<string, boolean> = {
key: "isActive",
value: true
};

console.log(stringBooleanPair); // { key: "isActive", value: true }

使用泛型约束

在某些情况下,我们希望确保类型参数满足某些特定的条件,这可以使用 泛型约束 来实现。我们可以通过 extends 关键字来指定类型约束。

定义带约束的泛型接口

例如,我们可以定义一个新的接口,使得 K 必须是 string 类型,而 V 可以是任意类型:

1
2
3
4
interface StringKeyedPair<V> {
key: string;
value: V;
}

实现带约束的接口

现在,我们可以实现 StringKeyedPair 接口,使用 boolean 类型作为值:

1
2
3
4
5
6
const booleanPair: StringKeyedPair<boolean> = {
key: "isActive",
value: true
};

console.log(booleanPair); // { key: "isActive", value: true }

泛型接口的应用场景

  1. 数据结构:在实现栈、队列等数据结构时,使用泛型接口可以使得数据结构支持多种类型。

  2. API 响应:在处理不同类型的 API 响应时,可以使用泛型接口来描述可能的返回数据类型。

示例:使用泛型接口实现栈

以下是一个使用泛型接口实现简单栈的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
interface Stack<T> {
push(item: T): void;
pop(): T | undefined;
isEmpty(): boolean;
}

class ArrayStack<T> implements Stack<T> {
private items: T[] = [];

push(item: T): void {
this.items.push(item);
}

pop(): T | undefined {
return this.items.pop();
}

isEmpty(): boolean {
return this.items.length === 0;
}
}

// 使用泛型接口
const numberStack = new ArrayStack<number>();
numberStack.push(1);
numberStack.push(2);
console.log(numberStack.pop()); // 2

const stringStack = new ArrayStack<string>();
stringStack.push("Hello");
console.log(stringStack.pop()); // "Hello"

在这个例子中,我们定义了一个泛型接口 Stack 和它的一个实现 ArrayStack。通过使用泛型,我们可以创建支持 numberstring 的栈实例,而不需要重复代码。

结论

在本章中,我们深入探讨了 泛型与接口 的作用和应用。使用泛型接口可以提高我们代码的灵活性和可重用性,让我们能够处理多种类型的数据。在实际开发中,了解并善用泛型接口是非常重要的。

接下来,我们将进一步探讨 使用泛型类,这将帮助我们了解如何在类中引入泛型,并提高类的通用性。

23 泛型的使用 🌐之泛型与接口

https://zglg.work/typescript-zero/23/

作者

AI免费学习网(郭震)

发布于

2024-09-14

更新于

2024-09-14

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论