首页 > 其他分享 >ts:泛型函数(T)

ts:泛型函数(T)

时间:2024-11-01 20:21:11浏览次数:6  
标签:string 型函数 number ts 类型 mes arg 泛型

ts:泛型函数(T)

一、主要内容说明

泛型有几个,有T(type)、V(vuale)、E(element)、U、R等。本文用T,当然T也是泛型中最常使用的。ts中,我们泛型T我们可以把它当成一个类,这个类里包含string、number等多种类,当程序运行时,它会根据我们输入的参数自动判断为某一种类型。如我们,分别输入数值、字符串、日期类型的参数后,泛型可以自动判断我们输入的数值、字符串、日期类型参数,然后分别输出数值、字符串、日期的函数变化后的内容。通常情况下的函数,想输出数值,需要专门设置好输出的类型为number。想输出字符串,需要专门设置好输出的类型为string。想输出或输入日期类型,需要设置好输出或输入的类型为Date。函数泛型之外,还有泛型接口,泛型类,泛型约束等,本文只是列举了泛型函数的简单创建和使用,其他泛型内容会按需要另起博文。
对比泛型函数和其他正常函数的区别,把他们的创建模式放一起,以对比差异。

function mes<T>(arg: T): T {
    return arg; // 返回传入的参数
}

// 普通函数,接受字符串参数
function mes_2(arg_2: string): string {
    return arg_2; // 返回传入的字符串
}

// 定义另一个普通函数,接受数字参数
function mes_3(arg_3: number): number {
    return arg_3; // 返回传入的数字
}

通过上例,第一个函数mes为泛型。它可以传入和传出大部分类型参数,如number、string、Date等。而第二个函数mes_2,只接收和传出string字符串类型,如果将传入的类型变为number数值类型,则报错。同样的,第三个函数mes_3,只接收和传出number类型,如果传入的类型为string字符串类型,则也报错。但对于第一个函数mes,泛型的,它可以接受string的同时也接收number的类型,甚至还可以接收date时间等等的类型。

二、例子

(一)、泛型函数的创建

1.源码1泛型函数的创建

// 定义一个泛型函数
function mes<T>(arg: T): T {
    return arg; // 返回传入的参数
}

// 使用泛型
const num = mes<number>(764); // 返回类型为 number
console.log(num); // 输出: 764

const str = mes<string>("Hello"); // 返回类型为 string
console.log(str); // 输出: Hello

2.源码1运行效果

在这里插入图片描述

(二)、泛型与其他类型参数的对比

1.源码2

// 定义一个泛型函数
function mes<T>(arg: T): T {
    return arg; // 返回传入的参数
}

// 普通函数,接受字符串参数
function mes_2(arg_2: string): string {
    return arg_2; // 返回传入的字符串
}

// 定义另一个普通函数,接受数字参数
function mes_3(arg_3: number): number {
    return arg_3; // 返回传入的数字
}

console.log("\n分隔行-------------------------------------\n");

// 调用 mes_2,传入字符串
const str2 = mes_2("字符串元素"); // 返回类型为 string
console.log("string类输出:" + str2); // 输出: 字符串元素

// 使用泛型函数 mes 代替 mes_2,传入字符串
const str3 = mes<string>("字符串元素"); // 返回类型为 string
console.log("泛型输出:" + str3); // 输出: 字符串元素

// 以下行代码将会报错,因为 num2 的类型不匹配
// const num2 = mes_2(766); // 报错:类型 'number' 不能赋值给参数类型 'string'

console.log("\n分隔行-------------------------------------\n");

// 调用 mes_3,传入数字
const num3 = mes_3(767); // 返回类型为 number
console.log("number类输出:" + num3); // 输出: 767

// 以下行代码将会报错,因为 num5 的类型不匹配
// const num5 = mes_3("字符串元素"); // 报错:类型 'string' 不能赋值给参数类型 'number'

// 使用泛型函数 mes 代替 mes_3,传入数字
const num4 = mes<number>(767); // 返回类型为 number
console.log("泛型输出:" + num4); // 输出: 767

console.log("\n分隔行-------------------------------------\n");

// 创建两个 Date 对象
const date_1 = new Date("2024-10-28"); // 使用 ISO 8601 格式的日期字符串
const date_2 = new Date(2008, 8, 8); // 注意:月份是从 0 开始的,因此 8 表示 9 月

// 使用泛型函数 mes 处理 Date 类型
const num5 = mes<Date>(date_1); // 返回类型为 Date
const num6 = mes<Date>(date_2); // 返回类型为 Date

// 输出 Date 对象
console.log("泛型输出:" + num5); // 输出: 2024-10-28T00:00:00.000Z
console.log("泛型输出:" + num6); // 输出: 2008-09-08T00:00:00.000Z

2.源码2运行效果

在这里插入图片描述

三、结语

泛型和any类很相似。但any这一类,鸿蒙开发新版本开放后已不允许命名使用,那后面则不考虑不使用any类的创建。泛型用到的领域范围并不大。
我曾经问老师,如果我们跑路了是不是可以用泛型设置参数,让程序变乱。老师说想如此,还是得用any类,因为它早晚会报错,且不好维护和修复,而泛型反而是优化了代码。
ts和js一样只是鸿蒙开发的基础,过完ts这一段便进入到arkts的学习中。但这也无关紧要,它们的逻辑思想非常相似。各语言都有它自己专门的领域,并无好坏之分,重要的还得是运用它们的人。
由于笔者的能力有限,创作的内容有所不足在所难免,也敬请读者包涵和指出,万分感谢!

四、定位日期

源码内容输入完毕,文字说明今天再继续。
2024-10-28;
23:37;

2024-10-29;
12:03;

标签:string,型函数,number,ts,类型,mes,arg,泛型
From: https://blog.csdn.net/qq_44925904/article/details/143316132

相关文章

  • Etsy又被封号了!这次我终于搞懂了原因...
    你是否真的了解在Etsy开店有哪些红线不能踩?你是否真的知道Etsy被封号后如何解决?本文我将探讨Etsy账号被封的常见原因,以及卖家可以采取的应对策略,以期减轻对跨境业务的伤害程度,感兴趣的商家速速码住,不要再踩坑啦!一、Etsy的审核机制及防封启示首先,我们得先搞懂Etsy的审核机......
  • 恋爱脑学Rust之闭包三Traits:Fn,FnOnce,FnMut
    在Rust中,FnOnce、FnMut和Fn是三个用于表示闭包(closure)类型的trait。闭包是一种特殊的函数,它可以捕获其环境变量,即在其定义时所处的作用域中的变量。以下是关于这三个trait的详细介绍:1.FnOnce:一生一次的承诺理解:FnOnce就像在爱情中那个“一诺千金”的承诺。它只能被调......
  • 学习笔记(二十二):ArkTS语言-空安全
    概述:默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。这类似于TypeScript的严格空值检查模式(strictNullChecks),但规则更严格letx:number=null;//编译时错误lety:string=null;//编译时错误letz:number[]=null;//编译时错误可以为......
  • 手动搭建koa+ts项目框架(部署服务器使用pm2启动,并设置相关环境变量)
    文章目录前言一、什么是pm2?pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持性能监控,进程守护,负载均衡等功能二、配置环境变量1、配置`ecosystem.config.js`文件2、配置`pm2.json`文件总结`如有启发,可点赞收藏哟~`前言接着手动......
  • 学习笔记(二十):ArkTS语言-函数
    一、函数声明包含其名称、参数列表、返回类型和函数体functiongetName(defaultName:string):string{returndefaultName==='Alice'?defaultName:"Tom"} 二、可选参数格式可为name?:TypefunctiongetName(defaultName?:string):string{returndefaultName==null......
  • Adobe After Effects各版本安装包下载与安装
    1、安装包  我用夸克网盘分享了AfterEffects2024:链接:https://pan.quark.cn/s/fac88adbac44提取码:9ZMWAfterEffects2023:链接:https://pan.quark.cn/s/d41a0a447b93提取码:4pwMAfterEffects2022:链接:https://pan.quark.cn/s/0070a59da58d提取码:Eij1AfterEffect......
  • 学习笔记(十九):ArkTS语言基本知识
    一、声明变量letname:string="";name="Alice"如果一个变量或常量的声明包含了初始值,那么开发者就不需要显式指定其类型。ArkTS规范中列举了所有允许自动推断类型的场景。letname="Alice";二、声明常量constname:string="Alice";三、Union类型类型联合类......
  • 在使用echarts绘制图表时, 如果需要使用渐变色, 则应使用echarts内置的渐变色生成器ec
    series:[{name:'',type:'bar',barMaxWidth:20,label:{show:true,color:'#fff',},showBackground:true,backgroundStyle:{color:'#d5f1f9&......
  • ROLL: Long-Term Robust LiDAR-based Localization With Temporary Mapping in Changi
    开源代码:GitHub-HaisenbergPeng/ROLL:Areal-time,robustLiDAR-inertiallocalizationsystemROLL:Long-TermRobustLiDAR-basedLocalizationWithTemporaryMappinginChangingEnvironmentsROLL:基于LiDAR的长期稳健定位,在不断变化的环境中提供临时测绘摘要:长......
  • AI大模型高效开发神器来了 ,解读ModelArts 8大能力
    随着国资委、工信部等持续推动工业企业开展人工智能创新应用,以及AI大模型为代表的新一代AI技术在快速发展,赋能各行各业,开展AI的创新应用对领先的工业企业已经是必答题。,在IDC《中国工业AI综合解决方案2024年厂商评估》中,华为在战略、能力、市场份额三个维度取得第一,位于领导者类别......