# 泛型接口
在本教程中,你将学习 TypeScript 中的泛型接口。
# TypeScript 中的泛型接口介绍
和类一样,接口也支持泛型,泛型接口的语法如下:泛型类型参数列表在尖括号 <>
中,接口名称之后:
interface interfaceName<T> {
// ...
}
1
2
3
2
3
这使得类型参数 T
对接口的所有成员都是可见。
类型参数列表可以是一个或者多个类型,如下所示:
interface interfaceName<U, V> {
// ...
}
1
2
3
2
3
# 泛型接口例子:
看几个泛型接口声明的例子:
# 1) 描述对象属性的泛型接口
下面演示了一个泛型接口,他包含 key
和 value
两个属性,类型分别是 K
和 V
类型:
interface Pair<K, V> {
key: K;
value: V;
}
1
2
3
4
2
3
4
现在,你可以使用 Pair
接口定义任意指定类型的键值对对象,比如:
let month: Pair<string, number> = {
key: 'Jan',
value: 1,
};
console.log(month);
1
2
3
4
5
6
2
3
4
5
6
在这个例子中,我们定义了一个 key
为字符串类型而 value
为数字类型的键值对对象。
# 2) 描述方法的泛型接口
下面声明了一个泛型接口,它有两个方法:add()
和 remove()
方法:
interface Collection<T> {
add(o: T): void;
remove(o: T): void;
}
1
2
3
4
2
3
4
List<T>
泛型类实现了 Collection<T>
泛型接口:
class List<T> implements Collection<T> {
private items: T[] = [];
add(o: T): void {
this.items.push(o);
}
remove(o: T): void {
let index = this.items.indexOf(o);
if (index > -1) {
this.items.splice(index, 1);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
对于 List<T>
类,你可以创建任意类型的值列表,如数字或者字符串类型。比如,下面演示如何使用 List<T>
泛型类来创建一个数字列表对象:
let list = new List<number>();
for (let i = 0; i < 10; i++) {
list.add(i);
}
1
2
3
4
5
2
3
4
5
# 3) 描述索引类型的泛型接口
下面声明了一个描述索引类型的接口:
interface Options<T> {
[name: string]: T;
}
let inputOptions: Options<boolean> = {
disabled: false,
visible: true,
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
← 泛型类 Section 9. 模块 →