0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙语言TypeScript学习第18天:【泛型】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-16 14:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、TypeScript 泛型

泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。

泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。

使用泛型的主要目的是为了处理不特定类型的数据,使得代码可以适用于多种数据类型而不失去类型检查。

泛型的优势包括:

  • 代码重用: 可以编写与特定类型无关的通用代码,提高代码的复用性。
  • 类型安全: 在编译时进行类型检查,避免在运行时出现类型错误。
  • 抽象性: 允许编写更抽象和通用的代码,适应不同的数据类型和数据结构。
  • 鸿蒙开发文档参考 :[qr23.cn/AKFP8k]

2、泛型标识符

在泛型中,通常使用一些约定俗成的标识符,比如常见的 T(表示 Type)、UV 等,但实际上你可以使用任何标识符。

搜狗高速浏览器截图20240326151450.png

T: 代表 "Type",是最常见的泛型类型参数名。

鸿蒙HarmonyOSOpenHarmony学习籽料

+—mau123789是v直接拿取。
function identity< T >(arg: T): T {
    return arg;
}

K, V: 用于表示键(Key)和值(Value)的泛型类型参数。

interface KeyValuePair< K, V > {
    key: K;
    value: V;
}

E: 用于表示数组元素的泛型类型参数。

function printArray< E >(arr: E[]): void {
    arr.forEach(item = > console.log(item));
}

R: 用于表示函数返回值的泛型类型参数。

function getResult<  R >(value: R): R {
    return value;
}

U, V: 通常用于表示第二、第三个泛型类型参数。

function combine< U, V >(first: U, second: V): string {
    return `${first} ${second}`;
}

这些标识符是约定俗成的,实际上你可以选择任何符合标识符规范的名称。关键是使得代码易读和易于理解,所以建议在泛型类型参数上使用描述性的名称,以便于理解其用途。

3、泛型函数(Generic Functions)

使用泛型来创建一个可以处理不同类型的函数:

实例

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

// 使用泛型函数
let result = identity< string >("Hello");
console.log(result); // 输出: Hello

let numberResult = identity< number >(42);
console.log(numberResult); // 输出: 42复制

解析: 以上例子中,identity 是一个泛型函数,使用 表示泛型类型。它接受一个参数 arg 和返回值都是泛型类型 T。在使用时,可以通过尖括号 <> 明确指定泛型类型。第一个调用指定了 string 类型,第二个调用指定了 number 类型。

4、 泛型接口(Generic Interfaces)

可以使用泛型来定义接口,使接口的成员能够使用任意类型:

实例

// 基本语法
interface Pair< T, U > {
    first: T;
    second: U;
}

// 使用泛型接口
let pair: Pair< string, number > = { first: "hello", second: 42 };
console.log(pair); // 输出: { first: 'hello', second: 42 }复制

解析: 这里定义了一个泛型接口 Pair,它有两个类型参数 TU。然后,使用这个泛型接口创建了一个对象 pair,其中 first 是字符串类型,second 是数字类型。

5、 泛型类(Generic Classes)

泛型也可以应用于类的实例变量和方法:

实例

// 基本语法
class Box< T > {
    private value: T;

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

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

// 使用泛型类
let stringBox = new Box< string >("TypeScript");
console.log(stringBox.getValue()); // 输出: TypeScript复制

解析: 在这个例子中,Box 是一个泛型类,使用 表示泛型类型。构造函数和方法都可以使用泛型类型 T。通过实例化 Box,我们创建了一个存储字符串的 Box 实例,并通过 getValue 方法获取了存储的值。

4. 泛型约束(Generic Constraints)

有时候你想限制泛型的类型范围,可以使用泛型约束:

实例

// 基本语法
interface Lengthwise {
    length: number;
}

function logLength< T extends Lengthwise >(arg: T): void {
    console.log(arg.length);
}

// 正确的使用
logLength("hello"); // 输出: 5

// 错误的使用,因为数字没有 length 属性
logLength(42); // 错误复制

解析: 在这个例子中,定义了一个泛型函数 logLength,它接受一个类型为 T 的参数,但有一个约束条件,即 T 必须实现 Lengthwise 接口,该接口要求有 length 属性。因此,可以正确调用 logLength("hello"),但不能调用 logLength(42),因为数字没有 length 属性。

5. 泛型与默认值

可以给泛型设置默认值,使得在不指定类型参数时能够使用默认类型:

// 基本语法
function defaultValue< T = string >(arg: T): T {
    return arg;
}

// 使用带默认值的泛型函数
let result1 = defaultValue("hello"); // 推断为 string 类型
let result2 = defaultValue(42);      // 推断为 number 类型复制

实例

说明: 这个例子展示了带有默认值的泛型函数。函数 defaultValue 接受一个泛型参数 T,并给它设置了默认类型为 string。在使用时,如果没有显式指定类型,会使用默认类型。在例子中,第一个调用中 result1 推断为 string 类型,第二个调用中 result2 推断为 number 类型。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2859

    浏览量

    45359
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35582
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20724
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    在万物智联的时代背景下,操作系统底层能力的构建离不开编程语言与编译器的关键支撑。作为开源鸿蒙生态的核心技术,语言设计与编译器、虚拟机实现的进步直接关系到开发效率、运行性能与系统安全。本次分论坛聚焦
    的头像 发表于 11-20 17:24 490次阅读
    开源<b class='flag-5'>鸿蒙</b>技术大会2025丨编译器与编程<b class='flag-5'>语言</b>分论坛:<b class='flag-5'>语言</b>驱动系统创新,编译赋能生态繁荣

    达实智能34期智慧空间学习研讨会圆满举办

    2025年9月18日,由达实智能主办的34期“共创可体验的智慧空间”学习研讨会于深圳总部达实大厦圆满举办,来自安居集团、晨光乳业、华润、金蝶、京东健康、南方电网、南山医院、欧华国际、TCL、西门子医疗、中广核、中海地产、中集集
    的头像 发表于 09-22 16:02 649次阅读

    【HarmonyOS 5】金融应用开发鸿蒙组件实践

    【HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、鸿蒙生态观察 2024 年 1 月
    的头像 发表于 07-11 18:20 752次阅读
    【HarmonyOS 5】金融应用开发<b class='flag-5'>鸿蒙</b>组件实践

    明晚开播 |数据智能系列讲座7期:面向高化能力的视觉感知系统空间建模与微调学习

    鹭岛论坛数据智能系列讲座7期「面向高化能力的视觉感知系统空间建模与微调学习」明晚8点精彩开播期待与您云相聚,共襄学术盛宴!|直播信息报告题目面向高化能力的视觉感知系统空间建模与微
    的头像 发表于 06-24 08:01 835次阅读
    明晚开播 |数据智能系列讲座<b class='flag-5'>第</b>7期:面向高<b class='flag-5'>泛</b>化能力的视觉感知系统空间建模与微调<b class='flag-5'>学习</b>

    直播预约 |数据智能系列讲座7期:面向高化能力的视觉感知系统空间建模与微调学习

    鹭岛论坛数据智能系列讲座7期「面向高化能力的视觉感知系统空间建模与微调学习」6月25日(周三)20:00精彩开播期待与您云相聚,共襄学术盛宴!|直播信息报告题目面向高化能力的视觉
    的头像 发表于 05-29 10:04 470次阅读
    直播预约 |数据智能系列讲座<b class='flag-5'>第</b>7期:面向高<b class='flag-5'>泛</b>化能力的视觉感知系统空间建模与微调<b class='flag-5'>学习</b>

    tscircuit - 电路开发的 React 范式​ 用TypeScript、React和 AI工具构建电子产品

    TypeScript、React 和 AI 工具构建电子产品。
    的头像 发表于 04-30 18:18 1208次阅读
    tscircuit - 电路开发的 React 范式​   用<b class='flag-5'>TypeScript</b>、React和 AI工具构建电子产品

    KaihongOS操作系统:ArkTS语言基础

    ArkTS语言基础 KaihongOS是面向全场景的万物智联技术底座,在OpenHarmony基础上技术创新和系统能力增强的跨设备的操作系统,它支持多种设备类型。ArkTS是KaihongOS
    发表于 04-23 06:31

    DevEco Studio AI辅助开发工具两大升级功能 鸿蒙应用开发效率再提升

    ,生成综合性的答案。 2、 反馈优化: (1) 测试反馈:根据实测结果调整检索和生成策略。 (2) 强化学习:通过奖励机制优化模型行为。 经过RAG增强后的DeepSeek核心定位策略是专注成为鸿蒙
    发表于 04-18 14:43

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-2章OpenHarmony v3.2-Beta4版本测试

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-2章OpenHarmony v3.2-Beta4版本测试
    的头像 发表于 03-05 10:53 885次阅读
    【北京迅为】itop-3568 开发板openharmony<b class='flag-5'>鸿蒙</b>烧写及测试-<b class='flag-5'>第</b>2章OpenHarmony v3.2-Beta4版本测试

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-1章 体验OpenHarmony—烧写镜像

    【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-1章 体验OpenHarmony—烧写镜像
    的头像 发表于 03-04 16:31 876次阅读
    【北京迅为】itop-3568 开发板openharmony<b class='flag-5'>鸿蒙</b>烧写及测试-<b class='flag-5'>第</b>1章 体验OpenHarmony—烧写镜像

    HarmonyOS 应用开发赋能套件:鸿蒙原生应用开发的 “神助攻”

    随着鸿蒙生态的快速发展,越来越多的开发者投身于鸿蒙原生应用的开发中。然而,在学习鸿蒙原生应用开发时,许多开发者仍面临一系列问题,如不清楚如何快速入门,如何系统地
    发表于 02-17 16:37

    #新年新气象,大家新年快乐!#AIGC入门及鸿蒙入门

    、配置SDK等。 3. 开发实践**: 学习鸿蒙系统的架构和API,了解其组件化、分布式等特性。 通过官方文档和社区资源,学习和掌握鸿蒙应用的开发流程和技巧。 总结来说,AIGC作为一
    发表于 01-13 10:46

    AIGC入门及鸿蒙入门

    JDK、配置SDK等。 3. 开发实践: 学习鸿蒙系统的架构和API,了解其组件化、分布式等特性。 通过官方文档和社区资源,学习和掌握鸿蒙应用的开发流程和技巧。 总结来说,AIGC作为
    发表于 01-13 10:32

    gitee 支持的编程语言有哪些

    Gitee 支持的常见编程语言: Python :一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。 Java :一种面向对象的编程语言,被广泛用于企业级应用开发。 C++ :一种通用的、静态类型的、大小写敏感的、
    的头像 发表于 01-06 09:50 1108次阅读

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    /C++代码快速迁移至HarmonyOS NEXT。凭借卓越的兼容性,AKI已成为厂商与开发者打造鸿蒙原生应用过程中广泛使用的跨语言调用解决方案。 AKI是一款专为鸿蒙原生开发设计的FFI(外部函数接口
    发表于 01-02 17:08