TypeScript 泛型的使用

yizhihongxing

TypeScript 泛型的使用

泛型是指在定义函数、接口或类时,不预先指定具体的类型,而在使用时再指定类型的一种特性。它可以让我们写出更加灵活、通用的代码,并提高代码的复用性。

泛型函数

定义一个泛型函数的语法为:

function 函数名<T>(参数1: T, 参数2: T, ...): T {
  // 函数体
}

其中,函数名后面的 <T> 表示在函数体中可以使用 T 这个变量名来代表任意类型。

示例 1:

以下这个函数可以接收两个参数,并返回这两个参数组成的元组:

function makePair<T, U>(first: T, second: U): [T, U] {
  return [first, second];
}

使用:

console.log(makePair(1, "Hello"));      // [1, "Hello"]
console.log(makePair("World", true));  // ["World", true]

示例 2:

以下这个函数可以接收一个任意类型的数组,然后返回这个数组中所有元素的字符串表示形式:

function arrayToString<T>(arr: T[]): string {
  return arr.join(", ");
}

使用:

console.log(arrayToString([1, 2, 3]));             // "1, 2, 3"
console.log(arrayToString(["Hello", "World"]));    // "Hello, World"

泛型接口

定义一个泛型接口的语法为:

interface 接口名<T> {
  属性1: T,
  属性2: T,
  // ...
}

其中,接口名后面的 <T> 同样表示在接口中可以使用 T 这个变量名来代表任意类型。

示例:

以下这个接口描述了一个拥有 lengthsplice 两个属性的数组对象,并使用了泛型来表示数组中元素的类型:

interface MyArray<T> {
  length: number;
  splice(start: number, deleteCount?: number, ...items: T[]): T[];
}

使用:

let arr: MyArray<number> = {
  length: 0,
  splice(start: number, deleteCount: number, ...items: number[]): number[] {
    return [];
  }
};

泛型类

定义一个泛型类的语法为:

class 类名<T> {
  属性1: T;
  属性2: T;
  // ...
  constructor(参数1: T, 参数2: T, ...) {
    // 构造函数的内容
  }
}

同样地,类名后面的 <T> 表示在类中可以使用 T 这个变量名来代表任意类型。

示例:

以下这个类封装了一个泛型的栈结构:

class MyStack<T> {
  private items: T[] = [];

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

  pop(): T {
    return this.items.pop();
  }
}

使用:

let stack = new MyStack<number>();
stack.push(1);
stack.push(2);
console.log(stack.pop());    // 2
console.log(stack.pop());    // 1

以上就是 TypeScript 泛型的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TypeScript 泛型的使用 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Js实现Base64编码与解码

    Js实现Base64编码与解码的完整攻略如下: Base64编码与解码 Base64是一种用64种字符来表示二进制数据的编码方式。它常用于在URL、Cookie、网页传输等场合下,将原始数据转换为纯文本的形式来进行传输或存储。在JavaScript中,可以通过自带的atob和btoa函数来实现Base64的编解码。 Base64编码 在JavaScript中…

    JavaScript 2023年5月19日
    00
  • 深入理解JavaScript中的并行处理

    注意:以下回答中,为展示Markdown编写格式,某些符号前增加了转义符“\”,实际书写时应删除转义符。 深入理解JavaScript中的并行处理 什么是并行处理 并行处理是指在同一时间点上,多个任务同时执行的一种处理方式。在JavaScript中,并行处理有多种实现方式,例如利用Web Workers实现多线程并行处理,利用Event Loop实现异步并行…

    JavaScript 2023年5月27日
    00
  • JS实现拖拽的方法分析

    JS实现拖拽的方法分析 在Web开发中,拖拽是一种常见的交互方式。本文将介绍三种实现拖拽的方法。 HTML5 Drag and Drop API HTML5 Drag and Drop API是现代浏览器提供的原生拖拽功能,不需要引入任何第三方库。该API包含五个事件和三个属性,可以通过设置这些事件和属性来实现拖拽功能。 使用方法 将要拖拽的元素添加drag…

    JavaScript 2023年5月27日
    00
  • JavaScript常用事件介绍

    下面我将为您详细介绍“JavaScript常用事件”方面的攻略。在JavaScript中,我们可以使用各种事件来相应网页的状态改变和用户的互动。通过事件,我们可以触发一些特定的JavaScript函数,实现对用户行为的响应。 事件介绍 事件是用户在操作网页时触发的一些动作,包括鼠标点击、键盘输入、页面滚动、窗口大小调整等。常见的事件类型包括: 鼠标事件:cl…

    JavaScript 2023年5月27日
    00
  • js中toString()函数与valueOf()函数使用与区别

    js中 toString() 函数与valueOf() 函数使用与区别 在JavaScript中,几乎所有的数据类型都是对象,除了null和undefined。这些对象的实例都继承自一个共同的Object原型对象,因此它们也会同时继承Object原型对象上的方法和属性。其中,toString()函数和valueOf()函数是两个非常重要的方法,下面我们来仔细…

    JavaScript 2023年5月28日
    00
  • Vue-router中hash模式与history模式的区别详解

    Vue-router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,可以非常方便地实现前端路由功能。在Vue-router中,有两种路由模式:hash模式和history模式。 hash模式与history模式的区别 hash模式 hash模式是指URL地址中有一个#号,并且所有的路由都是在这个#号后面进行的。hash模式的路由URL如下: …

    JavaScript 2023年6月11日
    00
  • JavaScript实现手写promise的示例代码

    下面是详细讲解“JavaScript实现手写promise的示例代码”的完整攻略。 理解promise 在讲解如何手写promise之前,我们先来理解一下promise,它是一个用来处理异步操作的对象。在promise中,一个异步操作被包装成一个状态机对象,该状态机由三个状态组成——pending(等待中)、fulfilled(完成)、rejected(拒绝…

    JavaScript 2023年5月28日
    00
  • 深入理解JavaScript 箭头函数

    深入理解JavaScript 箭头函数 箭头函数是 ES6 中的一个新语法,它可以更简洁地定义一个匿名函数,并且具有一些特殊的语法规则和行为。在本篇文章中,我们将深入理解 JavaScript 箭头函数,包括其语法、使用方法、特殊行为以及一些示例说明。 箭头函数语法 箭头函数的语法是这样的: (parameters) => { statements }…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部