【TypeScript】TypeScript中的泛型

这篇具有很好参考价值的文章主要介绍了【TypeScript】TypeScript中的泛型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

泛型的意义及语法

定义一个函数或类时,有些情况下无法确定其中要使用的具体类型(返回值、参数、属性的类型不能确定),此时泛型便能够发挥作用。

  • 举个例子:

    • function test(arg: any): any{
      	return arg;
      }
      
    • 上例中,test函数有一个参数类型不确定,但是能确定的时其返回值的类型和参数的类型是相同的,由于类型不确定所以参数和返回值均使用了any,但是很明显这样做是不合适的,首先使用any会关闭TS的类型检查,其次这样设置也不能体现出参数和返回值是相同的类型

    • 使用泛型:

    • function test<T>(arg: T): T{
      	return arg;
      }
      
    • 这里的<T>就是泛型,T是我们给这个类型起的名字(不一定非叫T),设置泛型后即可在函数中使用T来表示该类型。所以泛型其实很好理解,就表示某个类型。

    • 那么如何使用上边的函数呢?

      • 方式一(直接使用):

        • test(10)
          
        • 使用时可以直接传递参数使用,类型会由TS自动推断出来,但有时编译器无法自动推断时还需要使用下面的方式

      • 方式二(指定类型):

        • test<number>(10)
          
        • 也可以在函数后手动指定泛型

    • 可以同时指定多个泛型,泛型间使用逗号隔开:

      • function test<T, K>(a: T, b: K): K{
            return b;
        }
        
        test<number, string>(10, "hello");
        
      • 使用泛型时,完全可以将泛型当成是一个普通的类去使用

    • 类中同样可以使用泛型:

      • class MyClass<T>{
            prop: T;
        
            constructor(prop: T){
                this.prop = prop;
            }
        }
        
    • 除此之外,也可以对泛型的范围进行约束

      • interface MyInter{
            length: number;
        }
        
        function test<T extends MyInter>(arg: T): number{
            return arg.length;
        }
        
      • 使用T extends MyInter表示泛型T必须是MyInter的子类,不一定非要使用接口类和抽象类同样适用。

复杂例子:可扩展的数据结构

现在让我们看一个更复杂的例子,使用泛型创建一个可扩展的数据结构。假设我们要实现一个Stack(栈)数据结构,它可以存储不同类型的元素。下面是使用泛型实现的Stack类:

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

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

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

  isEmpty(): boolean {
    return this.items.length === 0;
  }
}

// 使用泛型类
const stack = new Stack<number>();
stack.push(1);
stack.push(2);
stack.push(3);

while (!stack.isEmpty()) {
  console.log(stack.pop()); // 输出:3, 2, 1
}

在上面的例子中,我们使用泛型类Stack来创建一个可以存储不同类型元素的栈。通过使用泛型,我们可以在创建Stack实例时指定具体的元素类型。这使得我们可以在同一个栈中存储不同类型的数据,并保持类型安全。

例子出处文章来源地址https://www.toymoban.com/news/detail-705446.html

到了这里,关于【TypeScript】TypeScript中的泛型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 16.【TypeScript 教程】TypeScript 泛型(Generic)

    本节开始介绍 TypeScript 一些进阶知识点,第一个要介绍的泛型是 TypeScript 中非常重要的一个概念,它是一种用以增强函数、类和接口能力的非常可靠的手段。 使用泛型,我们可以轻松地将那些输入重复的代码,构建为可复用的组件,这给予了开发者创造灵活、可重用代码的能

    2024年01月18日
    浏览(32)
  • TypeScript 在前端开发中的应用实践

    TypeScript 已经成为前端开发领域越来越多开发者的首选工具。它是一种静态类型的超集,由 Microsoft 推出,为开发者提供了强大的静态类型检查、面向对象编程和模块化开发的特性,解决了 JavaScript 的动态类型特性带来的一些问题。 在本篇博文中,我们将深入探讨 TypeScript 在

    2024年02月15日
    浏览(30)
  • 前端经典面试题 | 吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解

    🖥️ 前端经典面试题 专栏:吊打面试官系列 之 说说你对TypeScript 和 JavaScript的理解 🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 ✨ 个人主页:CoderHing的个人主页 🍀 格言: ☀️ 路漫漫其修远兮,吾将上下而求索☀️ 👉 你的一键三连是我更新的最大动力❤️ 目录 一、回答

    2024年01月17日
    浏览(37)
  • TypeScript在前端开发中的重要性

    近年来, TypeScript 在前端开发中的重要性逐渐得到认可。作为一种静态类型的 JavaScript 的超集, TypeScript 通过引入静态类型、接口、类等特性,为前端开发带来了许多优势。本文将探讨 TypeScript 在前端开发中的重要性,并通过代码论证其价值。 首先, TypeScript 通过引入静态类

    2024年02月11日
    浏览(29)
  • 前端(六)——TypeScript在前端中的重要性与应用

    😊博主:小猫娃来啦 😊文章核心: TypeScript在前端中的重要性与应用 随着Web应用的复杂性不断增加,开发人员需要更强大的工具来应对这些挑战。TypeScript作为一种静态类型语言,满足了许多开发者对代码质量和可维护性的需求。下面我们将深入探讨TypeScript在前端中的定位

    2024年02月16日
    浏览(26)
  • Java中的泛型

    定义类、接口、方法时,同时声明了一个或者多个类型变量(如:),称为泛型类、泛型接口,泛型方法、它们统称为泛型。 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力。这样可以避免强制类型转换,及其可能出现的异常。 泛型的本质:

    2024年02月01日
    浏览(34)
  • typeScript(泛型篇)

    软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。 在像C#和Java这样的语言中,可以使用 泛型 来创建可重用的组件,一个组件可以

    2024年02月10日
    浏览(32)
  • TypeScript 进阶之泛型

    避免代码重复和创建可重用类型是编写干净代码的重要部分。 将所有类型属性都设置为可选 Required 与 Partial 相反。它构造一个类型,其中需要该类型的所有属性。它可用于确保没有可选属性出现在类型中。 多属性的对象中摘取某些属性。 键可以是字符串文字或字符串文字的

    2024年01月23日
    浏览(29)
  • C++中的泛型详细讲解

    它是一种泛化的编程方式,其实现原理为程序员编写一个函数/类的代码示例,让编译器去填补出不同的函数实现。允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包