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

41 阅读3分钟

TypeScript是一种静态类型检查的JavaScript超集,它为开发者提供了更好的代码可读性、可维护性和安全性。在TypeScript中,类和泛型是两个重要的概念,它们可以相互结合使用来增加代码的灵活性和安全性。本篇笔记将探讨TypeScript中泛型的使用方法和场景,并介绍如何使用类型约束来提高代码质量。

一、类的基本概念和用法

  1. 类的声明和实例化:

    • 在TypeScript中,我们可以使用class关键字来声明一个类,并通过new关键字来实例化该类。
    • 类可以包含属性、方法和构造函数,可以通过访问修饰符(publicprivateprotected)限制成员的访问权限。
  2. 类的继承和多态:

    • TypeScript支持类的继承,通过extends关键字可以实现类之间的继承关系。
    • 子类可以重写父类的方法,实现多态性。
    • 使用super关键字可以在子类中调用父类的构造函数和方法。
  3. 类的访问修饰符:

    • public:默认的修饰符,表示公开的成员可以在任何地方访问。
    • private:私有成员只能在类内部访问,子类和外部都无法访问。
    • protected:受保护成员可以在类内部和继承的子类中访问,外部无法访问。

二、泛型的基本概念和用法

  1. 泛型的声明和使用:

    • 泛型是一种在代码编写时不指定具体类型,而是在使用时确定类型的机制。
    • 使用尖括号(<>)将泛型参数括起来进行声明,例如:function foo<T>(arg: T): T
  2. 泛型类和泛型约束:

    • 可以使用泛型参数来定义类和接口。
    • 泛型约束可以通过关键字extends来限制泛型参数的类型范围,例如:class MyClass<T extends SomeType> { ... }
  3. 泛型函数和泛型类型别名:

    • 函数也可以使用泛型参数,使得函数能够适应各种类型的输入。
    • 使用type关键字可以创建泛型类型别名,增加代码的可读性。

三、泛型的应用场景

  1. 提高代码的复用性:

    • 泛型可以实现对不同类型数据的通用处理,提高了代码的复用性。
    • 例如,在数组操作中使用泛型可以编写一个通用的排序函数,适用于各种类型的数组。
  2. 增加代码的灵活性和安全性:

    • 泛型可以在编译阶段进行类型检查,避免运行时出现类型错误。
    • 使用类型约束可以限制泛型的类型范围,提高代码的健壮性。

以下为示例代码:

class Container<T extends number | string>{
private data: T[];
constructor() {
this.data = []; 
}
addItem(item: T) { this.data.push(item); }

getItem(index: number): T {
if (index >= 0 && index < this.data.length) {
return this.data[index]; 
} 
throw new Error("Index out of range"); 
	} 
}

以上代码中,Container类使用了泛型参数T来定义一个通用的容器类,其中的addItem方法用于添加元素,getItem方法用于获取指定位置的元素。通过使用类型约束extends number | string限制了泛型参数的类型范围。