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

前言

在现代前端开发中,TypeScript已经成为了一种广泛使用的编程语言。与JavaScript相比,TypeScript提供了更强大的静态类型检查和面向对象编程的特性。其中,泛型是TypeScript中一个非常重要且强大的特性,它可以让我们在编写代码时增加灵活性和安全性。本文将探讨TypeScript中泛型的使用方法和场景,以及如何使用类型约束来增加代码的灵活性和安全性。

TypeScript简介

TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,可以编译成纯JavaScript代码。TypeScript添加了静态类型检查、面向对象编程和其他一些新特性,以提高JavaScript代码的可维护性和可读性。

TypeScript类的基本使用方法

TypeScript中的类(Class)是一种面向对象的编程方式,用于创建对象的蓝图。通过类,可以定义对象的属性和方法,并基于类创建具体的实例。

下面是一个简单的示例,展示了TypeScript中类的基本使用方法:

csharp 复制代码
class Animal {
  private name: string;
  
  constructor(name: string) {
    this.name = name;
  }
  
  public getName(): string {
    return this.name;
  }
  
  public makeSound(): void {
    console.log("The animal makes a sound.");
  }
}

class Dog extends Animal {
  public makeSound(): void {
    console.log("The dog barks.");
  }
}

// 创建Animal类的实例
const animal = new Animal("Lion");
console.log(animal.getName()); // 输出:Lion
animal.makeSound(); // 输出:The animal makes a sound.

// 创建Dog类的实例
const dog = new Dog("Samoyed");
console.log(dog.getName()); // 输出:Samoyed
dog.makeSound(); // 输出:The dog barks.

在上面的示例中,我们定义了一个名为Animal的基类和一个名为Dog的子类。

Animal类有一个私有属性name和一个构造函数,用于初始化name属性。它还有两个公共方法:getName()用于获取name属性的值,makeSound()用于输出动物的声音。

Dog类继承自Animal类,并重写了makeSound()方法。

通过创建Animal类的实例animal,并调用其方法和属性,我们可以看到输出结果。同样,创建Dog类的实例dog并调用其方法和属性也能得到相应的输出。

通过使用类和继承,我们可以构建出更复杂的对象和对象之间的关系。这种面向对象的设计方式可以提高代码的可扩展性和可重用性。

TypeScript类的基本使用方法

TypeScript的泛型(Generics)允许我们在定义函数、类或接口时使用参数化类型,以增加代码的灵活性和可重用性。通过泛型,我们可以在编写代码时不指定具体的类型,而在使用时动态地传入类型参数。

下面是泛型的基本使用方式和示例:

  • 声明泛型函数:
typescript 复制代码
function identity<T>(arg: T): T {
  return arg;
}

// 使用泛型函数
let result = identity<string>("Hello");
console.log(result); // 输出:Hello

// 或者省略类型参数,TypeScript会根据传入的参数类型自动推断
let result2 = identity("World");
console.log(result2); // 输出:World
  • 泛型类:
typescript 复制代码
class Queue<T> {
  private items: T[] = [];

  enqueue(item: T) {
    this.items.push(item);
  }

  dequeue(): T | undefined {
    return this.items.shift();
  }
}

let queue = new Queue<number>();
queue.enqueue(1);
queue.enqueue(2);
console.log(queue.dequeue()); // 输出:1
  • 泛型约束:
typescript 复制代码
interface Lengthwise {
  length: number;
}

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

loggingIdentity([1, 2, 3]); // 输出:3
loggingIdentity("Hello"); // 输出:5
相关推荐
千慌百风定乾坤17 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO17 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬3 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399653 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold4 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记