前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TypeScript泛型

TypeScript泛型

原创
作者头像
堕落飞鸟
发布于 2023-05-22 02:29:11
发布于 2023-05-22 02:29:11
51000
代码可运行
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
运行总次数:0
代码可运行

TypeScript 中,泛型(Generics)是一种用于创建可重用的组件的强大工具。泛型允许在函数、类和接口中使用类型参数,使得这些组件能够适应多种数据类型,提高代码的灵活性和可重用性。

泛型函数

泛型函数是一种可以接受不同类型参数的函数。通过使用尖括号 <T> 来定义类型参数,并在函数参数、返回值或函数体中使用类型参数,可以实现泛型函数的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function identity<T>(value: T): T {
  return value;
}

let result1 = identity<string>("Hello");
let result2 = identity<number>(42);

console.log(result1); // 输出: "Hello"
console.log(result2); // 输出: 42

在上面的例子中,identity 函数使用了泛型类型参数 T。函数接受一个参数 value,类型为 T,并返回值也为 T。通过调用 identity 函数并显式指定类型参数,可以传递不同类型的值,得到相应类型的返回结果。

泛型类

泛型类是一种具有类型参数的类。通过在类名后面使用尖括号 <T> 来定义类型参数,并在类的属性、方法或构造函数中使用类型参数,可以创建可适用于多种类型的类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Container<T> {
  private value: T;

  constructor(value: T) {
    this.value = value;
  }

  getValue(): T {
    return this.value;
  }
}

let container1 = new Container<string>("Hello");
let container2 = new Container<number>(42);

console.log(container1.getValue()); // 输出: "Hello"
console.log(container2.getValue()); // 输出: 42

在上面的例子中,Container 类使用了泛型类型参数 T。类的构造函数接受一个参数 value,类型为 T,并将其赋值给私有属性 value。通过调用 getValue 方法,可以获取存储在容器中的值,其类型为 T

泛型接口

泛型接口是一种具有类型参数的接口。通过在接口名后面使用尖括号 <T> 来定义类型参数,并在接口的属性或方法中使用类型参数,可以定义适用于多种类型的接口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface Printer<T> {
  print(value: T): void;
}

class ConsolePrinter<T> implements Printer<T> {
  print(value: T): void {
    console.log(value);
  }
}

let printer1: Printer<string> = new ConsolePrinter<string>();
let printer2: Printer<number> = new ConsolePrinter<number>();

printer1.print("Hello"); // 输出: "Hello"
printer2.print(42); // 输出: 42

在上面的例子中,我们定义了一个泛型接口 Printer<T>,其中包含一个 print 方法。然后,我们创建了一个实现了该接口的类 ConsolePrinter<T>,并在其 print 方法中使用 console.log 打印传入的值。通过声明类型为 Printer<string>Printer<number> 的变量,我们可以分别创建适用于字符串和数字的打印器,并调用其 print 方法。

泛型约束

有时候我们希望泛型类型参数具有某些特定的属性或方法。为了达到这个目的,可以使用泛型约束(Generic Constraints)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface Lengthy {
  length: number;
}

function getLength<T extends Lengthy>(value: T): number {
  return value.length;
}

let length1 = getLength("Hello"); // 返回字符串的长度 5
let length2 = getLength([1, 2, 3, 4, 5]); // 返回数组的长度 5

在上面的例子中,我们定义了一个接口 Lengthy,该接口包含一个 length 属性。然后,我们定义了一个泛型函数 getLength,该函数接受一个泛型类型参数 T,并使用泛型约束 T extends Lengthy,表示 T 必须具有 Lengthy 接口中定义的属性。函数返回传入值的 length 属性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TypeScript手记(五)
软件工程中,我们不仅要创建定义良好且一致的 API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
用户7572539
2020/08/26
9390
TypeScript基础(五)泛型
在编程中,我们经常会遇到需要处理不同类型数据的情况。为了提高代码的复用性和灵活性,TypeScript引入了泛型的概念。泛型可以让我们在定义函数、类或接口时,不预先指定具体的类型,而是在使用时再指定类型。本文将详细介绍TypeScript中泛型的使用方法和技巧。
can4hou6joeng4
2023/11/17
3471
泛型_TypeScript笔记6
从类型上看,无论参数是什么类型,返回值的类型都与参数一致,借助重载机制,可以这样描述:
ayqy贾杰
2019/06/12
1.1K0
typescript基础篇(6):泛型
软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,在定义函数,接口或类的时候,不预先指定类型,而是等到使用时才指定——这在创建大型系统时为你提供了十分灵活的功能。
一粒小麦
2020/08/17
9990
typescript基础篇(6):泛型
深入浅出TypeScript | 青训营笔记
TS(TypeScript)是一种由Microsoft开发和维护的编程语言,它是JavaScript的超集,支持静态类型检查、类、接口、泛型等特性。TS最终会被编译为标准的JavaScript代码,因此可以运行在任何支持JavaScript的环境中。
心安事随
2024/07/29
900
深入浅出TypeScript | 青训营笔记
TypeScript 在实际项目中的应用#2024年度实用技巧
从TypeScript诞生之初,我就有在关注学习,当时还写了两篇相关介绍文章,尽管那个时候的我并不确定这个所谓的JavaScrip超集,是否会跟其他前端新技术一样,大家追捧一阵,随后便迅速消失在无人关注的角落里,但这么多年过去了,我想它的重要性已经成为任何一个前端的必备技术了。
Nian糕
2025/01/26
800
TypeScript 在实际项目中的应用#2024年度实用技巧
Java 泛型:概念、语法和应用
上述代码中,类 MyGenericClass 定义了一个泛型类型参数 T,它可以用来表示任何数据类型。
小尘要自信
2023/10/10
2380
【HormonyOS4+NEXT】TypeScript基础语法详解
TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,添加了静态类型、类、接口和泛型等特性。这些特性使得TypeScript在大型项目中具有更好的可维护性和可扩展性。本文将对TypeScript的基础语法进行详细讲解,帮助读者快速入门。
颜颜yan_
2024/04/20
1230
【TypeScript 4.5】007-第 7 章 类型操纵
泛型类型、keyof 类型操作符、typeof 类型操作符、索引访问类型、条件类型、映射类型、模板字面量类型
訾博ZiBo
2025/01/06
400
Vue3.3 + TS4,自主打造媲美 ElementPlus 的组件库
在面向对象编程中,泛型允许你在定义类、接口和方法时使用类型参数,从而提高代码的复用性和类型安全性。接下来,我们将详细介绍如何在类和接口中使用泛型。
瘦瘦itazs和fun
2025/02/09
520
typeScript学习总结(二)
距离上一次总结,鸽了很久了,一个原因是一直没有时间弄,另一个就是总结想起来容易,做起来真的很难,本能地排斥。不过该来的终究会来,就抓紧时间弄完吧。
张宗伟 plus
2022/10/28
3390
TypeScript 中的泛型
泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。
言程序
2024/07/06
1610
终于搞懂TS中的泛型啦!!
我们可以把泛型比喻为一个类型占位符,它告诉编译器:“嘿,这里有一个类型参数,我现在不确定具体是什么类型,但稍后会告诉你。”
程序员王天
2023/10/18
4300
终于搞懂TS中的泛型啦!!
《现代Typescript高级教程》泛型和类型体操
泛型和类型体操(Type Gymnastics)是 TypeScript 中高级类型系统的重要组成部分。它们提供了强大的工具和技巧,用于处理复杂的类型操作和转换。
linwu
2023/07/27
3880
什么是TS类型保护、泛型
炑焽
2024/08/11
980
TypeScript系列教程六《泛型》
在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。
星宇大前端
2021/07/19
9340
typescript的泛型_泛型有什么用
指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性。
全栈程序员站长
2022/09/16
1.1K0
typescript的泛型_泛型有什么用
泛型的初步认识(1)
假设有个泛型类如上,在使用该泛型类时,我们通过实例化该泛型类对象去指定具体的类型来替换泛型参数。
E绵绵
2024/04/20
910
泛型的初步认识(1)
一文带你来了解 TypeScript 泛型
通过定义接口, 泛型函数继承接口,则参数必须实现接口中的属性,这样就达到了泛型函数的约束。
程序员海军
2023/11/15
5880
TypeScript 第二章
在 TypeScript 的第一章中,我们了解了类型注解、类和接口、函数、基本类型和高级类型等基础知识。在本章中,我们将深入学习类型注解的进阶用法、类的继承和多态、泛型、模块和命名空间等高级特性。
世间万物皆对象
2024/03/20
880
相关推荐
TypeScript手记(五)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文