实践笔记:TypeScript 类、泛型的使用实践记录 | 青训营

65 阅读3分钟

TypeScript笔记:类、泛型的使用实践记录

TypeScript 类

在TypeScript中,类是一种类型定义的方式,可以用来描述和约束对象的行为。类可以包含属性、方法和构造函数等。

	class Person {  
	  name: string;  
	  age: number;  

	  constructor(name: string, age: number) {  
	    this.name = name;  
	    this.age = age;  
	  }  

	  sayHello() {  
	    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); 
	  }  
	}

在上面的代码中,我们定义了一个Person类,它有两个属性nameage,一个构造函数constructor和一个小方法sayHello。构造函数用于初始化对象的属性,小方法则用于描述对象的行为。

TypeScript 泛型

泛型是TypeScript中的一个重要特性,它允许我们定义参数化的类型,也就是在类型中预留一些类型参数,这些参数在实例化时需要被具体类型所替代。

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

在上面的代码中,我们定义了一个泛型函数identity,它接受一个类型参数T,并返回一个类型为T的值。这个函数没有任何特殊的操作,只是返回输入的值,但是通过使用泛型,我们可以对输入和输出的类型进行更灵活的约束。

泛型的使用方法和场景

泛型的使用场景非常广泛,可以用于定义函数、类、接口等。下面是一些常见的使用方法和场景:

  1. 泛型函数:如上面提到的identity函数,它对输入和输出的类型没有限制,可以是任意类型。
  2. 泛型接口:可以用于定义一些具有通用行为的对象,比如实现了某个接口的对象都可以进行某种操作。
  3. 泛型类:可以定义一些具有通用行为的类,比如实现了某个类的对象都可以进行某种操作。
  4. 类型约束:可以使用泛型来约束函数的输入和输出的类型,从而提高代码的灵活性和安全性。

下面是一些具体的例子:

  1. 泛型函数:
	function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {  
	  return obj[key];  
	}

在上面的代码中,我们定义了一个泛型函数getProperty,它接受两个参数:一个类型为T的对象和一个类型为K extends keyof T的键。这个函数返回一个类型为T[K]的值,也就是给定键在对象中对应的值。通过使用泛型,我们可以对输入和输出的类型进行更灵活的约束。

  1. 泛型接口:
	interface Listener<T> {  
	  onEvent(data: T): void;  
	}

在上面的代码中,我们定义了一个泛型接口Listener,它包含一个类型为T的参数的onEvent方法。这个接口可以用于定义具有通用行为的对象,比如所有实现了这个接口的对象都可以接收任意类型的消息事件。

  1. 泛型类:
	class Box<T> {  
	  value: T;  
	  constructor(value: T) {  
	    this.value = value;  
	  }  
	}

在上面的代码中,我们定义了一个泛型类Box,它接受一个类型参数T,并包含一个类型为T的属性。这个类可以用于定义具有通用行为的对象,比如所有实现了这个类的对象都可以存储任意类型的值。
4. 类型约束:

	function createArray<T>(length: number, value: T): T[] {  
	  const result: T[] = [];  
	  for (let i = 0; i < length; i++) {  
              result[i] = value;  
	  }  
	  return result;  
	}