鸿蒙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)开发学习手册》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 锁机制

优质博文&#xff1a;IT-BLOG-CN 定义&#xff1a;锁是计算机协调多个进程或线程并发访问某一资源的机制。 一、表锁&#xff08;偏读&#xff09; MyISAM 引擎&#xff0c;开销小&#xff0c;加锁快&#xff0c;无死锁、锁定粒度大、发生锁冲突的粒度最高&#xff0c;并发度…

从零开始学习深度学习库-4:自动微分

欢迎来到本系列的第四部分&#xff0c;在这里我们将讨论自动微分 介绍 自动微分&#xff08;Automatic Differentiation&#xff0c;简称AD&#xff09;是一种计算数学函数导数&#xff08;梯度&#xff09;的技术。在深度学习和其他领域中&#xff0c;自动微分是一种极其重要…

C#集合:从字典到队列——探索数据结构核心

文章目录 C# 中的集合类型C# Dictionary 字典C# Hashtable&#xff1a;哈希表Hashtable 类中的属性Hashtable 类中的方法 C# SortedList&#xff1a;排序列表SortedList 类的中的属性SortedList 类的中的方法 C# Stack&#xff1a;堆栈Stack 类中的属性Stack 类中的方法 C# Que…

深度学习面经-part3(RNN、LSTM)

3.RNN 核心思想&#xff1a;像人一样拥有记忆能力。用以往的记忆和当前的输入&#xff0c;生成输出。 RNN 和 传统神经网络 最大的区别:在于每次都会将前一次的输出结果&#xff0c;带到下一次的隐藏层中&#xff0c;一起训练。 RNN应用场景: 1.文本生成 2.语音识别 3.机器翻…

C/C++动态链接库的封装和调用

1 引言 静态链接库是在编译时被链接到程序中的库文件&#xff0c;在编译时&#xff0c;链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件&#xff0c;在编译时&#xff0c;可执行文件只包含对动态链接库的引用&#xff0c;而不…

mac npm install 很慢或报错

npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/pnpm failed, reason: certificate has expired 1、取消ssl验证&#xff1a; npm config set strict-ssl false 修改后一般就可以了&#xff0c;…

前端面试拼图-知识广度

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录并添加部分可参考的文档&#xff0c;如下... 1. 移动端H5 click有300ms延迟&#xff0c; 如何解决&#xff1f; 背景&#xff1a;double tap to zoom 移动端H5中的300ms点击延迟问题通常是由浏览…

3d导出stl格式模型破碎是什么原因,怎么解决?---模大狮模型网

在导出3D模型为STL格式时出现破碎(或称为碎片化)的情况通常是由于模型中存在几何上的问题造成的。以下是一些可能导致STL模型破碎的原因以及解决方法&#xff1a; 3d导出stl格式模型破碎的原因&#xff1a; 模型不封闭&#xff1a;STL格式要求模型必须是封闭的实体&#xff0c…

电机学(笔记)

磁极对数p&#xff1a; 直流电机的磁极对数是指电机定子的磁极对数&#xff0c;也等于电机电刷的对数。它与电机的转速和扭矩有直接关系。一般来说&#xff0c;极对数越多&#xff0c;电机转速越低&#xff0c;扭矩越大&#xff0c;适用于低速、高扭矩的场合&#xff1b;相反&…

分布式搜索引擎elasticsearch专栏一

初识elasticsearch 1.1了解ES elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在码云搜索代码 在电商网站搜索商品 在百度搜索答案 1.1.2.ELK…

一个可商用私有化部署的基于JAVA的chat-gpt网站

目录 介绍一、核心功能1、智能对话2、AI绘画3、知识库4、一键思维导图5、应用广场6、GPTS 二、后台管理功能1、网站自定义2、多账号登录支持3、商品及会员系统4、模型配置5、兑换码生成6、三方商户用户打通 结语 介绍 java语言的私有化部署的商用网站还是比较少的 这里给大家介…

中国银行信息系统应用架构发展历程

概述&#xff1a; 从 20 世纪 80 年代开始至今&#xff0c;我国银行业信息化历程已 有四十年历史。虽然相对于发达国家来讲&#xff0c;我国银行业务信 息化起步较晚&#xff0c;但发展速度很快&#xff0c; 目前我国一些大型商业银行的信息化程度已经处于全球领先水平。 “银行…

机器学习-04-分类算法-04-支持向量机SVM

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法与SVM算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

学习在ubuntu系统下安装vsftp软件安装教程

学习在ubuntu系统下安装vsftp软件安装教程 安装vsftpd创建用户创建专用目录添加ftp用户修改目录归属和权限 修改配置文件配置文件其他部分详解 启动、停止、重启vsftp服务命令使用filezilla.exe 安装vsftpd apt-get install vsftpd创建用户 创建专用目录 mkdir /home/ftp添加…

arcgis数据导出到excel

将arcgis属性数据导出到excel&#xff1a; 1&#xff09; 工具箱\系统工具箱\Conversion Tools.tbx\Excel\Excel 转表 2&#xff09;用excel打开导出的图层文件中后缀为.dbf的数据&#xff08;方便快捷&#xff0c;但是中文易乱码&#xff09;

Linux 文件系统:文件描述符、管理文件

目录 一、三个标注输入输出流 二、文件描述符fd 1、通过C语言管理文件—理解文件描述符fd 2、文件描述符实现原理 3、文件描述符0、1、2 4、总结 三、如何管理文件 1、打开文件的过程 2、内核空间的结构 struct task_struct&#xff08;PCB&#xff09; struct file…

hcia复习总结9

NAT 在ip地址空间中&#xff0c;A,B,C三类地址中各有一部分地址&#xff0c;他们被称为私有地址&#xff08;私网IP地址&#xff09;&#xff0c;其余的所有地址都被称为公有地址&#xff08;公网IP地址&#xff09; A&#xff1a;10.0.0.0-10.255.255.255--相当于一个A类网络…

LeetCode 热题 100

未完待续… 一、哈希 1、两数之和 # 暴力解&#xff0c;时间复杂度&#xff1a;o(n^2) class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""for i in range(len(nums)):fo…

检查约束

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 检查约束 检查约束指的是在数据列上设置一些过滤条件&#xff0c;当过滤条件满足的时候才可以进行保存&#xff0c;如果不满足则出现错误。例如&#xff0c;设置年龄的信息…

【C语言】猜数字游戏

代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> void game() {int r rand() % 100 1;int guess 0;while (1){printf("请猜数字>:");scanf("%d", &guess…