千家信息网

TypeScript 泛型怎么用

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要为大家展示了"TypeScript 泛型怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"TypeScript 泛型怎么用"这篇文章吧。1.
千家信息网最后更新 2025年11月14日TypeScript 泛型怎么用

这篇文章主要为大家展示了"TypeScript 泛型怎么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"TypeScript 泛型怎么用"这篇文章吧。

1.简单的使用

现在我们要定义一个join函数,该函数的功能主要是接受两个类型一样的值,返回两个参数拼接后的值。示例代码如下:

// 所谓的泛型,通俗一点的解释就是泛指的类型// 定义一个join函数,接受两个一样类型的参数,并将两个参数拼接后返回。function join(first: T, second: T) {  return `${first}${second}`}// 这里明确 T 为 string 类型join('第一', '第二') // 第一第二// 这里通过类型推导的方式,编译器会根据传入的参数自动推断出类型join(1, 2) // 12

定义泛型是通过<>对尖括号来定义,我们在定义join函数的时候,并不知道可以接受那些类型,但是可以明确的是两个类型是必须一样的,如果想要满足这样的需求,不用泛型的话解决起来是没有这么简单的。

在调用函数的时候,这里使用了两种方式,一种是直接指定类型为string类型;另一种是通过类型推导的方式,编辑器会根据传入的参数自动帮助我们确定类型。

2.在函数中使用泛型

在定义一个函数时,我们可以使用多个泛型,而且返回值类型也可以通过泛型指定,只要在数量上和使用方式上能对应就可以。

示例代码如下

function identity(first: T, second: Y, third: P): Y {  return second}// 指定类型identity(true, '字符串', 123) // 字符串// 类型推断identity('string', 123, true) // true

3.在类中使用泛型

我们不仅可以在函数中使用泛型,还可以在类中使用泛型。

示例代码如下:

class DataManager {  // 定义一个类,该类中具有一个T类型的私有数组  constructor(private data: T[]) {}  // 根据索引说数组中的值  getItem(index: number): T {    return this.data[index]  }}const data = new DataManager(['一碗周'])data.getItem(0) // 一碗周

而且泛型还可以继承与于某个接口,示例代码如下:

interface Item {  name: string}class DataManager {  // 定义一个类,该类中具有一个T类型的私有数组  constructor(private data: T[]) {}  // 根据索引说数组中的值  getItem(index: number): string {    return this.data[index].name  }}const data = new DataManager([{ name: '一碗周' }])data.getItem(0) // 一碗周

使用extends可以达到一个泛型约束 的作用,就上面那个代码来说,我们必须约束传入的值必有具有一个name属性,否则就会抛出异常。

4.在泛型约束中使用类型参数

假如有如下需求,我们定义一个类,在类中一个私有对象,该对象中包含一些属性;然后定义一个方法,通过key来获取其对应的值。

实现代码如下:

// 定义一个接口interface Person {  name: string  age: number  hobby: string}// 定义一个类class Me {  constructor(private info: Person) {}  getInfo(key: string) {    return this.info[key]  }}const me = new Me({  name: '一碗周',  age: 18,  hobby: 'coding',})// 调用 me.getInfo() 可能会得到一个 undefined 如下示例me.getInfo('myName') // undefined

上面的代码,如果我们调用示实例对象中的getInfo()方法时,传入一个没有的属性,会得到一个undefined。调用一个方法返回一个undefined时,这并不是TypeScript中的作风。

解决该问题可以通过keyof操作符,该关键字可以通过该操作符可以用于获取某种类型的所有键,其返回类型是联合类型。

示例代码如下:

type myPerson = keyof Person // 'name' | 'age' | 'hobby'

那现在就可以通过该操作符解决上面出现的那个问题

示例代码如下:

class Me {  constructor(private info: Person) {}  // 该写法与如下写法是一样的  getInfo(key: T): Person[T] {    return this.info[key]  }  // getInfo(key: T): Person[T] {  //     return this.info[key]  // }}const me = new Me({  name: '一碗周',  age: 18,  hobby: 'coding',})// 调用 me.getInfo() 如果传递一个未知的属性则会编译错误me.getInfo('myName') // error : 类型""myName""的参数不能赋给类型"keyof Person"的参数。

现在我们只要访问对象中不具有的属性编译则会异常。

以上是"TypeScript 泛型怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

类型 代码 函数 参数 示例 两个 属性 可以通过 对象 数组 方式 内容 操作符 方法 篇文章 帮助 私有 编译 写法 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全相关网站 计算机网络技术阳江 船舶数据库更新 联合成功网络技术有限公司 学了一年软件开发能去芯片厂吗 中大型网咖的计算机网络技术 软件开发外包 验收标准 软件开发开发人员发展 网络安全的重要性1500字论文 三级网络技术辅导章节 汉威科技工业互联网大赛 计算机网络技术分专业类 网络技术三级考试教程 网络安全教育课案例 查找关于网络安全简单的手抄报 我的世界进不去服务器无效会话 密云网络安全三级认证 站群服务器什么牌子好 简单网络安全的手抄报 内网服务器怎么远程连接 服务器专用管理语言 苹果app网页封装软件开发 明日之后服务器能互通吗 软件开发14001环境认证体系 智慧土地资产管理软件开发公司 抚顺网络安全宣传活动 网络安全信息分析制度 苏州建设智慧社区软件开发 催生网络安全生态 朋友圈转发软件开发
0