首页 > 其他分享 >TypeScript 的泛型(Generics)

TypeScript 的泛型(Generics)

时间:2024-05-14 15:55:55浏览次数:16  
标签:TypeScript value numberQueue 类型 参数 Generics 泛型

TypeScript 的泛型(Generics)是一种在编写可复用、灵活且类型安全的代码时非常有用的特性。泛型允许你在编写函数、类或接口时使用参数化类型,这些参数化类型在使用时可以被具体指定。

基本概念

泛型允许你编写能够适用于各种类型的代码,而不是固定于一种特定类型。在函数、类或接口中,你可以定义一个或多个类型参数,这些类型参数将在实际使用时被替换为具体的类型。

用法示例

1. 函数泛型

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

let result = identity<string>("hello");
// result 的类型为 string,因为传入的参数是字符串类型

在这个例子中,<T> 表示这是一个类型参数,可以接受任何类型的参数。当我们调用 identity 函数时,通过 <string> 指定了类型参数 T 为 string,因此 TypeScript 知道返回值的类型应该是 string

2. 接口泛型

interface Box<T> {
    value: T;
}

let box: Box<number> = { value: 10 };
// box 中的 value 必须是数字类型

这个示例中,Box 接口使用了一个类型参数 T,用来指定 value 属性的类型。通过指定 <number>,我们告诉 TypeScript box 对象中的 value 属性应该是数字类型。

 

3. 类泛型

class Queue<T> {
    private  T[] = [];

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

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

let numberQueue = new Queue<number>();
numberQueue.push(1);
numberQueue.push(2);
let firstItem = numberQueue.pop();
// firstItem 的类型为 number

在这个示例中,Queue 类使用了类型参数 T,用来指定队列中的元素类型。当我们创建 numberQueue 实例时,指定了类型参数为 number,所以该队列只能存储数字类型的元素。

优势

  • 代码复用性:泛型使得你能够编写可重用的代码,而不必限制于特定的类型。
  • 类型安全:使用泛型可以在编译时捕获类型错误,确保类型的一致性。
  • 灵活性:可以将泛型应用于函数、类、接口等不同的语法结构,使得代码更加灵活和可扩展。

泛型是 TypeScript 中非常强大和灵活的特性,能够帮助你编写更加通用、可维护和类型安全的代码。

标签:TypeScript,value,numberQueue,类型,参数,Generics,泛型
From: https://www.cnblogs.com/ygyy/p/18191444

相关文章

  • TypeScript 对象数组的类型
    在TypeScript中,你可以使用接口(interface)来定义这种对象数组的类型。接口允许你描述对象的形状,从而确保你的数据结构符合预期。对于给定的数据 [{"name":"小明","age":"18"},{"name":"小东","age":"10"}],你可以这样声明一个接口:interfacePerson{......
  • TypeScript 的类型注解
    在TypeScript中,类型注解是一种用于指定变量、函数参数、函数返回值等处的类型信息的语法。通过类型注解,你可以告诉TypeScript编译器某个变量的类型是什么,以便在编译时进行类型检查,并提供更好的代码提示和错误检测。类型注解通常使用冒号 : 后跟着一个类型来指定。例如:let......
  • TypeScript主要类型
    TypeScript支持多种类型,其中一些主要类型包括:基本类型:number:表示数字,可以是整数或浮点数。string:表示字符串。boolean:表示布尔值,即 true 或 false。null 和 undefined:分别表示null和undefined。symbol:表示唯一的、不可变的值。复合类型:array:表......
  • 泛型(Generics)
    Java中的泛型(Generics)是JDK5引入的一种特性,它使得类、接口和方法能够以一种类型参数化的方式进行定义和使用。泛型的主要目的是增强代码的类型安全性和可读性,同时减少类型转换(cast)操作。泛型的基本概念泛型允许我们在类、接口和方法中定义和使用参数化类型,即用一个占位符(类型参......
  • 泛型
    1泛型在类上的引用【案例1】创建类MyData,使用<>就有了泛型publicclassMyData<T>{privateTdata;publicTgetData(){returndata;}publicvoidsetData(Tdata){this.data=data;}}【案例2】使用泛型publicclassTest......
  • 使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数
    使用TypeScript编写一个函数getPackageSize,该函数接收一个配置对象packageOpt作为参数,用于获取指定文件夹中所有文件的总大小,并根据配置决定是否返回已转换单位的大小值或直接通过回调函数返回字节大小。下面是一个基于Node.js环境的实现示例,因为直接在浏览器环境中操作文件系统......
  • C/C++ 泛型 -- 继承与多态
    【1】继承与多态-- 多态在模板中的应用#include<iostream>usingnamespacestd;namespace_nmsp1{//多态//人类classHuman{public:virtualvoideat(){cout<<"人类以吃米饭和面食为主!"<<endl;......
  • go 1.18 泛型
     引用:https://segmentfault.com/a/1190000041634906Go1.18泛型全面讲解:一篇讲清泛型的全部WonderfulSoap 2022-03-31阅读 24 分钟English229 序2022年3月15日,争议非常大但同时也备受期待的泛型终于伴随着Go1.18发布了。可是因为Go对泛型的支......
  • dubbo 泛型调用示例 (dubbo generic call)
     1.背景泛型调用适用于观察者模式,即有很多广泛的消费者,但生产者又不想依赖消费者的client包,比如常见的API开放平台的回调机制; 2.泛型调用要实现泛型调用,几个核心点:泛型入参如何构建泛型服务service如何构建泛型调用结果如何拿到 2.1泛型入参 泛型入参须是Ha......
  • rust trait 关联类型和泛型的区别
    关联类型和泛型虽然在某些方面看起来相似,但它们在Rust中扮演着不同的角色,有着本质的区别。下面我会详细解释关联类型、泛型以及它们在Iteratortrait上的应用,以帮助理解为什么Iteratortrait使用关联类型而非泛型参数来定义。关联类型关联类型是trait的一部分,它允许trait......