在 TypeScript 中,泛型(Generics)是一种在编写可复用的、灵活的代码时非常强大的工具。泛型允许你编写不依赖于具体类型的代码,从而提高代码的灵活性。以下是 TypeScript 中泛型的基本概念和用法:

1. 基本泛型语法:
   使用 <T> 表示泛型,其中 T 是类型参数,可以是任何标识符。
   function identity<T>(arg: T): T {
       return arg;
   }

   let result1: number = identity(1);
   let result2: string = identity("hello");

2. 泛型函数:
   在函数内使用泛型类型参数,可以使函数接受不同类型的参数。
   function pair<T, U>(first: T, second: U): [T, U] {
       return [first, second];
   }

   let stringAndNumber = pair("one", 1);
   let booleanAndString = pair(true, "yes");

3. 泛型类:
   类也可以使用泛型类型参数,使类中的属性和方法具有泛型性。
   class Box<T> {
       value: T;

       constructor(value: T) {
           this.value = value;
       }
   }

   let numberBox = new Box<number>(42);
   let stringBox = new Box<string>("hello");

4. 泛型接口:
   接口可以使用泛型来定义泛型类型。
   interface Pair<T, U> {
       first: T;
       second: U;
   }

   let pair1: Pair<number, string> = { first: 1, second: "two" };
   let pair2: Pair<boolean, number> = { first: true, second: 42 };

5. 泛型约束:
   可以使用泛型约束来限制泛型类型参数的类型。
   interface Lengthwise {
       length: number;
   }

   function logLength<T extends Lengthwise>(arg: T): void {
       console.log(arg.length);
   }

   logLength("hello");
   logLength([1, 2, 3]);
   // logLength(42); // 错误,number 没有 length 属性

6. 泛型在类中的应用:
   在类中使用泛型可以提高类的复用性。
   class Pair<T> {
       first: T;
       second: T;

       constructor(first: T, second: T) {
           this.first = first;
           this.second = second;
       }
   }

   let numberPair = new Pair<number>(1, 2);
   let stringPair = new Pair<string>("hello", "world");

这些是 TypeScript 中泛型的一些基本概念和用法。泛型是一种强大的工具,可以使你编写更加通用和灵活的代码,从而提高代码的可维护性和可复用性。


转载请注明出处:http://www.zyzy.cn/article/detail/4698/TypeScript