TypeScript 泛型的使用

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中实现浅拷贝和深拷贝的代码详解

    浅拷贝和深拷贝是JavaScript中常用的两种复制对象的方法,两者的差别在于复制后对象所指向的地址是否相同。如果新生成的对象与原对象的内存地址相同,我们就称为浅拷贝;如果新生成的对象与原对象的内存地址不同,那么就称为深拷贝。 浅拷贝的实现 浅拷贝可以通过Object.assign()方法、扩展操作符或者遍历实现: Object.assign()方法实现浅拷…

    JavaScript 2023年6月10日
    00
  • js使用Array.prototype.sort()对数组对象排序的方法

    下面是“js使用Array.prototype.sort()对数组对象排序的方法”的详细攻略: 1. Array.prototype.sort()方法介绍 Array.prototype.sort() 方法用于对数组进行排序。默认情况下按照字符串的 Unicode 码点进行排序。 语法 array.sort([compareFunction]) 参数说明: …

    JavaScript 2023年5月27日
    00
  • 向fckeditor编辑器插入指定代码的方法

    关于向Fckeditor编辑器插入指定代码的方法,可以分为以下两种方式: 一、在源码视图中添加指定代码 步骤如下: 打开Fckeditor编辑器,点击源码视图按钮; 在源码视图中添加你的代码段,注意代码段必须符合HTML标准; 回到正常视图,此时你的代码段会被正确渲染出来。 以下是一个示例代码,添加了一个带有样式的Button按钮: <button s…

    JavaScript 2023年6月11日
    00
  • 一文教你彻底学会JavaScript手写防抖节流

    一文教你彻底学会JavaScript手写防抖节流 什么是防抖和节流 在介绍手写防抖节流之前,先来了解一下防抖和节流的概念: 防抖:指在短时间内多次触发同一个事件,只执行最后一次,或者只在开始时执行一次。 节流:指连续触发事件但是在 n 秒中只执行一次函数。即在某个时间段内,无论触发多少次事件,都只执行一次函数。 防抖和节流可以用来解决频繁触发的问题,避免资源…

    JavaScript 2023年6月10日
    00
  • ajax跨域(基础域名相同)表单提交的方法

    基于基础域名相同的情况,ajax跨域表单提交的方法可以通过以下步骤实现: 在服务端设置允许跨域访问 首先,在服务端需要设置响应头允许跨域访问,可以使用以下代码: // Nodejs可用的代码 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin&quot…

    JavaScript 2023年6月11日
    00
  • JavaScript 事件冒泡简介及应用

    JavaScript 事件冒泡简介及应用 事件冒泡是指在 HTML 的 DOM 树结构中,当某个元素触发了一个事件后,它会向父元素逐层传递,直至到达文档根节点。这种事件传递方式被称为事件冒泡。 冒泡机制的触发方式 当一个元素触发一个事件时,事件将从触发元素开始,然后向上冒泡到它的父元素,父元素的父元素,依此类推,直到冒泡到文档中的根元素为止。整个过程称为事件…

    JavaScript 2023年6月10日
    00
  • JavaScript前后端JSON使用方法教程

    以下是”JavaScript前后端JSON使用方法教程”的完整攻略: 前言 在Web开发中,JSON是一个重要的数据交换格式。在JavaScript中,我们经常需要使用JSON来进行数据解析、数据交换、以及与后端交互等操作。因此,本篇文章主要介绍了JavaScript前后端JSON使用方法。 JavaScript读取JSON数据 JavaScript提供了p…

    JavaScript 2023年5月27日
    00
  • 一起来看看js对象和事件的学习笔记

    一起来看看js对象和事件的学习笔记 前言 本文将介绍JavaScript中对象和事件相关知识,并提供一些示例,帮助读者更好的理解和掌握这些知识。 什么是对象 在JavaScript中,对象指的是一组属性和方法的集合。它可以通过字面量或构造函数来创建。 下面是一个使用字面量创建对象的示例: const person = { name: ‘张三’, age: 1…

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