title: 泛型接口

泛型接口

原文地址

在本教程中,你将学习 TypeScript 中的泛型接口。

TypeScript 中的泛型接口介绍

和类一样,接口也支持泛型,泛型接口的语法如下:泛型类型参数列表在尖括号 <> 中,接口名称之后:

  1. interface interfaceName<T> {
  2. // ...
  3. }

这使得类型参数 T 对接口的所有成员都是可见。

类型参数列表可以是一个或者多个类型,如下所示:

  1. interface interfaceName<U, V> {
  2. // ...
  3. }

泛型接口例子:

看几个泛型接口声明的例子:

1) 描述对象属性的泛型接口

下面演示了一个泛型接口,他包含 keyvalue 两个属性,类型分别是 KV 类型:

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

现在,你可以使用 Pair 接口定义任意指定类型的键值对对象,比如:

  1. let month: Pair<string, number> = {
  2. key: 'Jan',
  3. value: 1,
  4. };
  5. console.log(month);

在这个例子中,我们定义了一个 key 为字符串类型而 value 为数字类型的键值对对象。

2) 描述方法的泛型接口

下面声明了一个泛型接口,它有两个方法:add()remove() 方法:

  1. interface Collection<T> {
  2. add(o: T): void;
  3. remove(o: T): void;
  4. }

List<T> 泛型类实现了 Collection<T> 泛型接口:

  1. class List<T> implements Collection<T> {
  2. private items: T[] = [];
  3. add(o: T): void {
  4. this.items.push(o);
  5. }
  6. remove(o: T): void {
  7. let index = this.items.indexOf(o);
  8. if (index > -1) {
  9. this.items.splice(index, 1);
  10. }
  11. }
  12. }

对于 List<T> 类,你可以创建任意类型的值列表,如数字或者字符串类型。比如,下面演示如何使用 List<T> 泛型类来创建一个数字列表对象:

  1. let list = new List<number>();
  2. for (let i = 0; i < 10; i++) {
  3. list.add(i);
  4. }

3) 描述索引类型的泛型接口

下面声明了一个描述索引类型的接口:

  1. interface Options<T> {
  2. [name: string]: T;
  3. }
  4. let inputOptions: Options<boolean> = {
  5. disabled: false,
  6. visible: true,
  7. };