鸿蒙App开发学习 - TypeScript编程语言全面开发教程(下)

现在我们接着上次的内容来学习TypeScript编程语言全面开发教程(下半部分)

4. 泛型

TypeScript 中的泛型(Generics)是一种编程模式,用于在编写代码时增强灵活性和可重用性。泛型使得在定义函数、类、接口等数据类型时可以使用参数化类型,从而使这些数据类型具有更广泛的适用性。泛型能够让我们编写出更加通用、灵活的代码,同时提高代码的类型安全性。

4.1 泛型函数

function identity<T>(arg: T): T {return arg;
}
let output = identity<string>("hello"); // 输出 "hello"
let output2 = identity<number>(123); // 输出 123

在这个例子中,identity 函数是一个泛型函数。它接受一个参数 arg,并返回相同类型的参数。通过在函数名后面使用尖括号 来定义泛型,并在参数类型和返回类型中使用泛型类型 T。

4.2 泛型类

class GenericClass<T> {private value: T;constructor(value: T) {this.value = value;}getValue(): T {return this.value;}
}
let stringObject = new GenericClass<string>("hello");
console.log(stringObject.getValue()); // 输出 "hello"
let numberObject = new GenericClass<number>(123);
console.log(numberObject.getValue()); // 输出 123

在这个例子中,GenericClass 是一个泛型类,它接受一个类型参数 T,并将该类型参数用于成员变量 value 的类型和方法 getValue 的返回类型。

4.3 泛型接口

interface GenericInterface<T> {value: T;getValue(): T;
}
class MyClass<T> implements GenericInterface<T> {constructor(public value: T) {}getValue(): T {return this.value;}
}
let stringObject: GenericInterface<string> = new MyClass<string>("hello");
console.log(stringObject.getValue()); // 输出 "hello"
let numberObject: GenericInterface<number> = new MyClass<number>(123);
console.log(numberObject.getValue()); // 输出 123

在这个例子中,GenericInterface 是一个泛型接口,它定义了一个属性 value 和一个方法 getValue,并都使用了泛型类型 T。MyClass 类实现了 GenericInterface 接口,并通过类型参数 T 指定了 value 的类型。

5. 枚举

在 TypeScript 中,枚举(enums)是一种数据类型,用于定义命名的常量集合。枚举允许我们为一组相关的常量赋予友好的名称,并且在代码中以一种更具可读性和可维护性的方式来引用它们。

5.1 数字枚举

enum Direction {Up,Down,Left,Right,
}
let playerDirection: Direction = Direction.Right;
console.log(playerDirection); // 输出 3,即 Right 对应的数字值

在这个例子中,Direction 枚举定义了一组方向常量,它们分别对应了数字值 0、1、2 和 3。默认情况下,枚举成员的值从 0 开始递增。

5.2 字符串枚举

enum Color {Red = "RED",Green = "GREEN",Blue = "BLUE",
}
let primaryColor: Color = Color.Red;
console.log(primaryColor); // 输出 "RED"

在这个例子中,Color 枚举定义了一组颜色常量,它们分别对应了字符串值 “RED”、“GREEN” 和 “BLUE”。字符串枚举的每个成员必须有初始化器,并且不能自动递增。

5.3 值与名称的双向映射

enum KeyCode {Up = 38,Down = 40,Left = 37,Right = 39,
}
console.log(KeyCode.Up); // 输出 38
console.log(KeyCode[38]); // 输出 "Up"

在这个例子中,KeyCode 枚举定义了一组键码常量,它们分别对应了相应的键码值。通过枚举成员的名称来获取其对应的值,或者通过枚举成员的值来获取其对应的名称。

5.4 常量和计算成员

enum Weekday {Monday = 1,Tuesday = Monday + 1,Wednesday = Tuesday + 1,Thursday = Wednesday + 1,Friday = Thursday + 1,Saturday = 7,Sunday = Saturday,
}
console.log(Weekday.Monday); // 输出 1
console.log(Weekday.Tuesday); // 输出 2
console.log(Weekday.Sunday); // 输出 7

在这个例子中,Weekday 枚举定义了一组表示星期的常量,其中一些成员是通过计算得出的。

6. 高级类型

TypeScript 提供了许多高级类型来增强代码的灵活性和表达能力。下面是一些常用的高级类型:

6.1 交叉类型(Intersection Types)

交叉类型允许我们将多个类型合并为一个新的类型。新类型将具有所有类型的成员。

interface A {propA: number;
}
interface B {propB: string;
}
type AB = A & B;
let obj: AB = {propA: 123,propB: "hello"
};

在这个例子中,AB 类型是 A 和 B 接口的交叉类型,obj 变量既有 propA 也有 propB 属性。

6.2 联合类型(Union Types)

联合类型允许一个值可以是几种类型之一。使用 | 符号来表示。

let var: string | number;
var = "hello";
var = 123;

在这个例子中,var 变量可以是字符串类型或数字类型。

6.3 类型别名(Type Aliases)

类型别名可以为任意类型创建一个新名字。

type Age = number;
type Person = {name: string;age: Age;
};
let person: Person = {name: "Alice",age: 30
};

在这个例子中,Age 是 number 类型的别名,Person 是一个包含 name 和 age 属性的对象类型。

6.4 索引类型(Index Types)

索引类型允许通过索引访问对象的属性。

interface Person {name: string;age: number;
}
type PersonProp = keyof Person;
let key: PersonProp = "name"; // "name" | "age"

在这个例子中,PersonProp 是 Person 接口的属性名称的联合类型,key 变量可以是 “name” 或 “age”。

6.5 映射类型(Mapped Types)

映射类型允许我们基于已有类型创建新类型。

interface Person {name: string;age: number;
}
type ReadonlyPerson = {readonly [K in keyof Person]: Person[K];
};
let person: ReadonlyPerson = {name: "Alice",age: 30
};
person.name = "Bob"; // 报错,readonly 属性不能被修改

在这个例子中,ReadonlyPerson 类型将 Person 接口的所有属性都设为只读。

这些高级类型可以帮助我们更好地组织和表达代码,并且提供了更多的类型安全性和灵活性。

总结

以上就是 TypeScript 全部的基础知识,学习完毕以后再学习 ArkTS 会更简单。关注我,持续学习 鸿蒙App开发~ 接下来学习 ArkTS

最后

随着鸿蒙开发越来越火热,我了解到现在有很多小伙伴想入行鸿蒙,但又不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。我给大家整理了一份实用的鸿蒙(Harmony OS)开发学习手册资料用来跟着学习是非常有利于帮助大家提升鸿蒙开发技术的。

相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。资料包含了、应用开发导读(ArkTS)、HarmonyOS 概念、如何快速入门、开发基础知识、基于ArkTS 开发、等鸿蒙开发必掌握的核心知识要点,内容包含了(技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→《鸿蒙星河版开发教程指南》

鸿蒙(Harmony NEXT)最新学习路线

在这里插入图片描述


有了路线图,怎么能没有学习资料呢,小编也准备了几套HarmonyOS NEXT学习视频 内容包含以下联

内容包含:ArkTS、TypeScript、ArkUI、资源分类…等知识点。

获取完整版高清学习路线,请点击→《HarmonyOS教学视频》

HarmonyOS教学视频

在这里插入图片描述

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:

获取白皮书:请点击→《鸿蒙生态应用开发白皮书V2.0PDF》

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

1.应用开发导读(ArkTS)

2.……

在这里插入图片描述


二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5…

在这里插入图片描述


三、如何快速入门?

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.……

在这里插入图片描述


四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……

在这里插入图片描述


五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……

在这里插入图片描述


更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/278612.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Machine Learning ---- Feature Scaling

目录 一、What is feature scaling:&#xff1a; 二、Why do we need to perform feature scaling? 三、How to perform feature scaling: 1、Normalization: 2、Mean normalization: 3、Standardization (data needs to follow a normal distribution): 一、What is featur…

关于 闰年 的小知识,为什么这样判断闰年

闰年的规定&#xff1a; 知道了由来&#xff0c;我们就可以写程序来判断&#xff1a; #include <stdio.h> int main() {int year, leap;scanf("%d",&year);if((year%4 0 && year%100 ! 0) || year%400 0)leap 1;else leap 0;if(leap) printf(…

26-Java访问者模式 ( Visitor Pattern )

Java访问者模式 摘要实现范例 访问者模式&#xff08;Visitor Pattern&#xff09;使用了一个访问者类&#xff0c;它改变了元素类的执行算法&#xff0c;通过这种方式&#xff0c;元素的执行算法可以随着访问者改变而改变访问者模式中&#xff0c;元素对象已接受访问者对象&a…

为什么说CRM是制造业数字化模型的源头?

2023年&#xff0c;中国制造业投资持续企稳向好&#xff0c;全年增长6.5%。制造业发展韧性强劲&#xff0c;但如何激发有效需求&#xff0c;在防范产能过剩的同时实现产业升级&#xff0c;这是摆在当下诸多制造企业面前的现实问题。 山东章鼓企划信息管理处部长、山东鲸头鹳智…

win修改图标自定义QQ桌面图标

当安装了TIM后&#xff0c;想把图标改成QQ 图标见顶部&#xff0c;或通过网盘下载 提取码&#xff1a;9Ayc 操作步骤&#xff1a; 1.桌面右键图标&#xff0c;点击属性 2.选择快捷方式-更改图标 3.浏览选择下载的ico图标即可

基于单片机的老人防丢系统设计

目 录 摘 要 I Abstract II 引 言 3 1 系统总体架构 6 1.1方案设计与选择 6 1.2 系统架构设计 6 1.3 系统器件选择 7 2 系统硬件设计 9 2.1 单片机外围电路设计 9 2.2 LCD1602液晶显示电路设计 12 2.3 短信模块电路设计 14 2.4 GPS模块电路设计 14 2.5 电源与按键控制电路设计…

C++——字符串、读写文件、结构体、枚举

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的夜间车辆检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发夜间车辆检测系统对于自动驾驶技术具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个夜间车辆检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间…

力扣坑题:回文排列

bool canPermutePalindrome(char* s){ int arr[128]{0}; for(int x0;x<strlen(s);x) { arr[(s[x])]; } int flag0; for(int i0;i<128;i) {if(arr[i]%2!0){flag;} } if(flag>1) {return false; } return true; }没想到吧&#xff0c;不止26个英文字母

maven一点通

1.maven简介 Maven是一个基于Java的工程构建工具&#xff0c;用于管理和构建项目的依赖关系。它提供了一种标准的项目结构和一组约定&#xff0c;使得项目的开发、构建、部署和文档化更加容易和可靠。 Maven的主要功能包括&#xff1a; 依赖管理&#xff1a;Maven可以自动下载…

海康威视相机SDK二次开发(JAVA语言)

目录 前言客户端创建虚拟相机示例代码保存图片程序运行结果修改需求 二次开发引入外部包对SaveImage.java文件进行修改保存图片saveDataToFile方法选择相机chooseCamera方法主方法 FileUtil类处理过期照片启动类与配置文件application.yml通过实体类读取yml启动类 SaveImage.ja…

【JS逆向学习】猿人学第六题 js混淆 回溯

逆向目标 网址&#xff1a;https://match.yuanrenxue.cn/match/6接口&#xff1a;https://match.yuanrenxue.cn/api/match/6参数&#xff1a;payload(m、q) 逆向过程 老规矩&#xff0c;先来分析网络请求&#xff0c;加密的地方一目了然&#xff0c;没什么可多说的&#xff…

惬意上手Redis

Redis介绍 Redis&#xff08;全称为REmote Dictionary Server&#xff09;是一个开源的、内存中的数据存储结构&#xff0c;主要用作应用程序缓存或快速相应数据库。 REmote Dictionary Server: 有道翻译Redis是“远程字典服务”&#xff0c;远程不过是远程访问&#xff0c;而…

Linux:搭建ntp服务器

我准备两个centos7服务器 一个为主服务器连接着外网&#xff0c;并且搭建了ntp服务给其他主机同步 另外一个没有连接外网&#xff0c;通过第一台设备去同步时间 首先两个服务器都要安装ntp软件 yum -y install ntp 再把他俩的时间都改成别的 左侧的是主服务器&#xff0c;主…

07|链(下):想学“育花”还是“插花”用RouterChain确定客户意图

任务设定 鲜花养护&#xff08;保持花的健康、如何浇水、施肥等&#xff09;鲜花装饰&#xff08;如何搭配花、如何装饰场地等&#xff09; 如果接到的是第一类问题&#xff0c;你要给ChatBot A指示&#xff1b;如果接到第二类的问题&#xff0c;你要给ChatBot B指示。 整体…

数据可信流通,从运维信任到技术信任

信任 共同观点&#xff1a; 信任是涉及交易或交换关系的基础 身份可确认利益可依赖能力有预期行为有后果 数据流通中的不可信风险 内循环&#xff1a;数据持有方在自己的运维安全域内对自己的额数据使用和安全拥有全责外循环&#xff1a;数据要素在离开持有方安全域后&#…

【网络安全】 MSF生成木马教程

本文章仅用于信息安全学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若读者因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与作者无关。 环境准备&#xff1a; 名称系统位数IP攻击机Kali Linux6410.3.0.231客户端Windows 76410.3.0.234…

ACWing--基础算法--贪心(部分题解)

目录 906.区间问题--区间分组 906.区间问题--区间分组 原题&#xff1a; 给定 N 个闭区间 [ai,bi]&#xff0c;请你将这些区间分成若干组&#xff0c;使得每组内部的区间两两之间&#xff08;包括端点&#xff09;没有交集&#xff0c;并使得组数尽可能小。 输出最小组数。 输…

Linux 部署 Samba 服务

一、Ubuntu 部署 Samba 1、安装 Samba # 更新本地软件包列表 sudo apt update# 安装Samba sudo apt install samba# 查看版本 smbd --version2、创建共享文件夹&#xff0c;并配置 Samba 创建需要共享的文件夹&#xff0c;并赋予权限&#xff1a; sudo mkdir /home/test sud…

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步&#xff0c;非实时&#xff0c;实现最终的一致性。 四、分布式事务的解决方案