对TS里泛型的理解

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

对TS里泛型的理解

概念

  • 当我们定义一个变量不确定类型的时候有两种解决方式:
  • 使用any(使用any定义时存在的问题:虽然已知道传入值的类型但是无法获取函数返回值的类型;另外也失去了ts类型保护的优势)
  • 使用泛型(泛型指的是在定义函数/接口/类型时,不预先指定具体的类型,而是在使用的时候在指定类型限制的一种特性。)
  • 以上来自:TS中的泛型

简述

  • 在 TypeScript 中,泛型是一种参数化类型的机制,它可以在不同的数据类型之间共享代码(例如同一个函数,参数可以是字符数组,可以是数字数组,至于是字符还是数字类型,在构造函数的时候会预先定义一个类型变量。以便于调用的时候为其赋值,确认何种类型。)。泛型可以用于函数、类和接口等语法结构。

在函数中使用泛型

可以使用尖括号<>来表示泛型类型变量,例如:

function identity<T>(arg: T): T {
  return arg;
}

let output = identity<string>("myString");  // output 的类型为 string

let outputNum = identity<number>(123);  // outputNum 的类型为number

这里,函数 identity 接收一个类型为 T 的参数 arg,并返回一个同样类型的值。

调用 identity(“myString”) 即表示传入一个字符串类型的参数,并返回一个字符串类型的值。此时 output 的类型被推断为 string。

在类中使用泛型

可以在类名后方使用尖括号来声明泛型类型变量,例如:

class GenericNumber<T> {
  zeroValue: T;      // 此处定义了一个泛型变量 zeroValue
  add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

此时类 GenericNumber 接收一个泛型类型变量 T,并在类中使用了该变量。我们可以创建一个 GenericNumber 的实例,指定 T 为 number 类型,并可以访问该实例的属性和方法。

在接口中使用泛型

可以在定义接口时使用尖括号来声明泛型类型变量,例如:

interface GenericIdentityFn<T> {
  (arg: T): T;
}

function identity<T>(arg: T): T {
  return arg;
}

let myIdentity: GenericIdentityFn<number> = identity;

这里,我们定义了一个接口 GenericIdentityFn,并指定它的函数属性接受一个类型变量 T 类型的参数,并返回一个同样类型的值。

我们实现了一个函数 identity,并将其赋值给 myIdentity,同时指定类型变量 T 为 number。文章来源地址https://www.toymoban.com/news/detail-492308.html

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

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

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

相关文章

  • 泛型的通配符

    类型的上界决定了泛型的范围。 我们发现指定了泛型的上界为数值类Number时,传入Boolean类型就会报错。 如果没有指定类型的边界,可以认可 T extends Object,当指定了某个类型为上界,那么只接受某类型本身和子类型作为E的类型实参 我们要实现一个类去找数组的一个的最大值

    2023年04月08日
    浏览(93)
  • 【Java】泛型的简单使用

    在了解泛型之前我们先了解什么是包装类,在Java中由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean 除了 Integer

    2024年02月04日
    浏览(30)
  • Java语言-----泛型的认识

    目录 一.什么是泛型 二.泛型类的使用 2.1泛型类的定义  2.2泛型类的数组使用 三.泛型的上界  四.泛型的方法 五.泛型与集合 😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主  🌈梦的目标:努力学习,向Java进发,拼搏一切,让自己的未来不会有遗憾。  🎁欢迎各位→点

    2023年04月23日
    浏览(37)
  • Java中泛型的详细介绍

    引言:         Java语言中的泛型是一种强大的特性,它允许我们在编写代码时指定类、接口和方法的参数类型。通过使用泛型,我们可以提高代码的重用性、可读性和安全性。在本博客中,我们将详细介绍Java中泛型的知识。         泛型是Java 5中引入的一个新特性。

    2024年01月18日
    浏览(29)
  • C#(六十二)之泛型的约束

    类型约束 基类约束有两个重要的目的。 1:它允许在泛型类中使用有约束指定的基类成员。 2:确保只能使用支持指定基类或派生类的类型实例。 约束是使用 where 上下文指定的。 下表列出了五种类型的约束: 约束 说明 T:struct 类型参数必须是值类型。可以指定除

    2024年02月17日
    浏览(31)
  • 简述泛型的基本使用和作用

    在上一篇文章中,给大家讲解了泛型的概念、作用、使用场景,以及泛型集合、泛型接口和泛型类的用法,但受限于篇幅,并没有把泛型的内容讲解完毕。所以今天我们会继续学习泛型方法、泛型擦除,以及通配符等的内容,希望大家继续做好学习的准备哦。 全文大约【 4

    2024年02月07日
    浏览(36)
  • Java泛型的继承和通配符

    继承 两个容器所容纳的类类型是有子类父类的关系的 但是容器之间没有 反证法: 假设做法成立 list1=list2 list 指向list2的容器实例 list1.add(123)可以成立,明显标注 String 后是不行的 所以 类SuperA是类A的父类,则 GSuperA 与 GA 是并列关系没有子父关系 类SuperA是类A的父类或接口

    2024年01月17日
    浏览(30)
  • 【java数据结构】泛型的初步认识(2)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页: E绵绵的博客 💥 所属专栏: JAVA知识点专栏

    2024年04月26日
    浏览(25)
  • 编程中泛型的使用规则和限制是什么?

    泛型是一种程序设计风格,它允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。泛型主要用于实现通用的数据结构,例如集合、映射、列表等,使得这些数据结构可以存储多种类型的元素。 在泛型使用之前,程序员需要自己指定数据类

    2023年04月24日
    浏览(34)
  • Scala中的类型检查和转换,以及泛型,scala泛型的协变和逆变

    说明 (1) obj.isInstanceOf[T]:判断 obj 是不是T 类型。 (2) obj.asInstanceOf[T]:将 obj 强转成 T 类型。 (3) classOf 获取对象的类名。 案例 1.说明 (1)枚举类:需要继承 Enumeration (2)应用类:需要继承App 2. 案例 1.说明 使用 type 可以定义新的数据数据类型名称,本质上就

    2024年02月10日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包