首页 > 其他分享 >TS — 泛型

TS — 泛型

时间:2024-04-16 14:35:10浏览次数:16  
标签:number TS 类型 参数 arg 泛型 let

泛型(Generics)是 TypeScript 中的一个重要特性,它允许在定义函数、类或接口时使用参数类型的占位符,从而增加代码的灵活性和复用性。

1. 泛型函数

泛型函数允许在函数定义时使用类型参数,这些类型参数可以在函数体内使用,从而使函数可以处理多种类型的数据:

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

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

//<T> 表示这是一个泛型函数,T 是一个类型参数,可以在函数体内使用。函数 identity 接受一个参数 arg,并将它原封不动地返回。

2. 泛型类型

泛型类型允许在定义接口、类等类型时使用类型参数:

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

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

let myIdentity: GenericIdentityFn<number> = identity;

//GenericIdentityFn<T> 是一个泛型接口,定义了一个函数签名,该函数接受一个参数 arg,返回值类型与参数类型相同。然后,我们声明了一个类型为 GenericIdentityFn<number> 的变量 myIdentity,表示该变量是一个接受 number 类型参数的函数。

3. 泛型类

泛型类允许在类的实例成员或静态成员上使用类型参数:

typescript
class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

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

//GenericNumber<T> 是一个泛型类,它有两个成员:zeroValue 和 add。我们创建了一个 GenericNumber<number> 类型的实例 myGenericNumber,并分别为它的 zeroValue 和 add 成员赋予了适当的值。

4. 泛型约束

泛型约束允许限制泛型类型的范围,使泛型类型必须符合特定条件:

interface Lengthwise {
    length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
    console.log(arg.length);  // 我们知道这个参数有 .length 属性,所以没问题
    return arg;
}

//定义了一个泛型函数 loggingIdentity <T>,并使用了泛型约束 extends Lengthwise,表示泛型类型 T 必须符合 Lengthwise 接口的结构。这样,在函数内部就可以安全地访问 arg 参数的 length 属性。

5. 泛型与默认类型

在 TypeScript 中,可以为泛型参数指定默认类型:

function createArray<T = number>(length: number, value: T): T[] {
    let result: T[] = [];
    for (let i = 0; i < length; i++) {
        result.push(value);
    }
    return result;
}

let arr = createArray(3, 5);  // arr 的类型为 number[]

//reateArray<T = number> 中的 = number 表示 T 的默认类型为 number,如果调用函数时没有明确指定 T 的类型,则默认为 number。泛型是 TypeScript 中非常强大和灵活的特性,它可以帮助开发者编写更加通用和可复用的代码,提高代码的灵活性和可维护性。

 

标签:number,TS,类型,参数,arg,泛型,let
From: https://www.cnblogs.com/qinlinkun/p/18138045

相关文章

  • Python- pyecharts 制作示例可视化图表
    1、开发可视化图表使用的技术栈:Echarts框架的Python包——pyecharts2、官方网站:pyecharts-APythonEchartsPlottingLibrarybuiltwithlove.3、官方画廊:中文简介-Document(pyecharts.org)安装pyecharts包:pipinstallpyecharts一、构建各类图表所创建的对象......
  • web表格导出插件-bootstrap-table-export
    web表格导出插件-bootstrap-table-export<html><linkhref="https://unpkg.com/[email protected]/dist/bootstrap-table.min.css"rel="stylesheet"><linkrel="stylesheet"href="https://maxcdn.bootstrapcdn.com/boo......
  • P4298 [CTSC2008] 祭祀 题解
    P4298[CTSC2008]祭祀题解给定DAG,求最长反链长度,最长反链方案,有多少个点可以成为反链上的点。Case1熟知Dilworth定理:偏序集的最长反链的长度等于最小链划分。因为偏序集有传递性,所以我们也需要对DAG做一遍传递闭包。这样可以套用Dilworth定理,最小链划分等于点数减......
  • pyecharts实现点击省跳转省地图
    诶呀我去太感谢了终于找到实现点击地图省份实现跳转了。参考:利用pyecharts实现中国省与市之间的跳转_pyecharts点击地图跳转-CSDN博客 需要注意的问题:1.如果想在全国地图显示数据,data数据中要用如:北京市、广东省、香港特别行政区、内蒙古自治区,这种带有后缀的。(可能有些不需......
  • Go 标准库之 GoRequests 介绍与基本使用
    目录一、介绍二、安装三、导入四、基本使用4.1发送GET请求4.2POST请求发送JSON数据4.3Post文件上传4.4GoRequests使用代理4.5Gorequests使用session一、介绍官方文档DOC:https://pkg.go.dev/github.com/levigross/grequestsGithub:http://github.com/levigross/gr......
  • POI2007ODW-Weights
    进制#背包dp#贪心注意到呈倍数的性质,考虑按照倍数转换进制,贪心的选择小的按顺序选择//Author:xiaruizeconstintINF=0x3f3f3f3f3f3f3f3f;constintMOD=1000000007;constintN=2e5+10;intn,m;inta[N],b[N];piis[N];intcnt[N];vector<int>vec;int......
  • openGauss DB4AI-Snapshots数据版本管理
    DB4AI-Snapshots数据版本管理DB4AI-Snapshots是DB4AI模块用于管理数据集版本的功能。通过DB4ai-Snapshots组件,开发者可以简单、快速地进行特征筛选、类型转换等数据预处理操作,同时还可以像git一样对训练数据集进行版本控制。数据表快照创建成功后可以像视图一样进行使用,但是一经......
  • 使用fabric.js根据坐标生成svg图,并使用echarts显示
    仍然是在图片上特定区域根据数值显示不同的颜色的需求。拖了这么久,最终的解决方案终于定下来了:使用aoi检测设备导出的坐标来标定需显示数值和颜色的区域,如此一来就不需要人操作UI界面来标定数值的显示区域。最终使用echarts显示的方法有2种:地图map+使用坐标标记区域且区域有n......
  • TS — 类(详解)
    在TypeScript中,类是面向对象编程的基本概念之一,它允许你使用面向对象的方式组织和管理代码。1.类的基本定义在TypeScript中,类通过class关键字来定义。classPerson{name:string;age:number;constructor(name:string,age:number){this.......
  • echarts使用与踩坑
    0.踩坑点1.当图表不显示在页面(display:none)执行resize可能会导致图表样式混乱1.官网示例import*asechartsfrom'echarts';//基于准备好的dom,初始化echarts实例//注意:这里的main元素要有宽度才可以,不然页面上是看不到渲染的图标的,但实际上echarts已经初始化......