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

news2024/11/15 20:01:02

现在我们接着上次的内容来学习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.coloradmin.cn/o/1526981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeformableAttention的原理解读和源码实现

本专栏主要是深度学习/自动驾驶相关的源码实现,获取全套代码请参考 目录 原理第一步看看输入:第二步,准备工作:生成参考点的偏移量生成参考点的权重生成参考点 第三步,工作: 源码 原理 目前流行3D转2DBEV方案的都绕不开的transfomer变体-DeformableAttention. 传统transform…

DataFunSummit 2023因果推断在线峰会:解码数据与因果,引领智能决策新篇章(附大会核心PPT下载)

在数据驱动的时代&#xff0c;因果推断作为数据科学领域的重要分支&#xff0c;正日益受到业界的广泛关注。DataFunSummit 2023年因果推断在线峰会&#xff0c;汇聚了国内外顶尖的因果推断领域专家、学者及业界精英&#xff0c;共同探讨因果推断的最新进展、应用与挑战。本文将…

【小白笔记:JetsonNano学习(一)SDKManager系统烧录】

参考文章&#xff1a;SDKManager系统烧录 小白烧录文件系统可能遇到的问题 担心博主删除文章&#xff0c;可能就找不到比较详细的教程了&#xff0c;特意记录一下。 Jetson Nano采用四核64位ARM CPU和128核集成NVIDIA GPU&#xff0c;可提供472 GFLOPS的计算性能。它还包括4GB…

24计算机考研调剂 | 【官方】山东师范大学(22自命题)

山东师范大学2024年拟接收调剂 考研调剂信息 调剂专业目录如下&#xff1a; 计算机技术&#xff08;085404&#xff09;、软件工程&#xff08;085405&#xff09; 补充内容 我校2024年硕士研究生调剂工作将于4月8日教育部“中国研究生招生信息网”&#xff08;https://yz.ch…

海外问卷调查:代理IP使用方法

在进行问卷调查时&#xff0c;为了避免被限制访问或被封禁IP&#xff0c;使用代理IP已经成为了必要的选择。 其中&#xff0c;口子查和渠道查也不例外。 使用代理IP可以隐藏本机IP地址&#xff0c;模拟不同的IP地址&#xff0c;从而规避被封禁的风险。但是&#xff0c;对于很…

登录-前端部分

登录表单和注册表单在同一个页面中&#xff0c;通过注册按钮以及返回按钮来控制要显示哪个表单 一、数据绑定和校验 &#xff08;1&#xff09;绑定数据&#xff0c;复用注册表单的数据模型&#xff1a; //控制注册与登录表单的显示&#xff0c; 默认false显示登录 true时显…

linux 安装常用软件

文件传输工具 sudo yum install –y lrzsz vim编辑器 sudo yum install -y vimDNS 查询 sudo yum install bind-utils用法可以参考文章 《掌握 DNS 查询技巧&#xff0c;dig 命令基本用法》 net-tools包 yum install net-tools -y简单用法&#xff1a; # 查看端口占用情况…

3_springboot_shiro_jwt_多端认证鉴权_Redis缓存管理器

1. 什么是Shiro缓存管理器 上一章节分析完了Realm是怎么运作的&#xff0c;自定义的Realm该如何写&#xff0c;需要注意什么。本章来关注Realm中的一个话题&#xff0c;缓存。再看看 AuthorizingRealm 类继承关系 其中抽象类 CachingRealm &#xff0c;表示这个Realm是带缓存…

stm32-模拟数字转化器ADC

接线图&#xff1a; #include "stm32f10x.h" // Device header//1: 开启RCC时钟&#xff0c;包括ADC和GPIO的时钟//2&#xff1a;配置GPIO将GPIO配置为模拟输入模式//3&#xff1a;配置多路开关将左边的通道接入到规则组中//4&#xff1a;配置ADC转…

在Python中执行分位数回归

线性回归被定义为根据给定的变量集构建因变量和自变量之间关系的统计方法。在执行线性回归时&#xff0c;我们对计算响应变量的平均值感到好奇。相反&#xff0c;我们可以使用称为分位数回归的机制来计算或估计响应值的分位数&#xff08;百分位数&#xff09;值。例如&#xf…

Unity UGUI之Toggle基本了解

在Unity中&#xff0c;Toggle一般用于两种状态之间的切换&#xff0c;通常用于开关或复选框等功能。 它的基本属性如图&#xff1a; 其中&#xff0c; Interactable&#xff08;可交互&#xff09;&#xff1a;指示Toggle是否可以与用户交互。设置为false时&#xff0c;禁用To…

代码随想录|Day23|回溯03|39.组合总和、40.组合总和II、131.分割回文串

39.组合总和 本题和 216.组合总和III 类似&#xff0c;但有几个区别&#xff1a; 没有元素个数限制&#xff1a;树的深度并不固定&#xff0c;因此递归终止条件有所变化每个元素可以使用多次&#xff1a;下层递归的起始位置和上层相同&#xff08;startIndex不需要改动&#xf…

#每天一道面试题# 什么是MySQL的回表查询

MySQL中的索引按照物理存储的方式分为聚集索引和非聚集索引&#xff1b; 聚集索引索引和数据存储在一起&#xff0c;B树的叶子节点就是表数据&#xff0c;如果通过聚集索引查询数据&#xff0c;直接就可以查询出我们想要的数据&#xff1b;非聚集索引B树的叶子节点存储的是主键…

Hive SQL必刷练习题:连续问题 间断连续(*****)

问题描述&#xff1a; 1&#xff09; 连续问题&#xff1a;找出连续三天&#xff08;或者连续几天的啥啥啥&#xff09;。 2&#xff09; 间断连续&#xff1a;统计各用户连续登录最长天数&#xff0c;间断一天也算连续&#xff0c;比如1、3、4、6也算登陆了6天 问题分析&am…

Java八股文(XXL-JOB)

Java八股文のXXL-JOB XXL-JOB XXL-JOB xxl-job 是什么&#xff1f;它的主要作用是什么&#xff1f; xxl-job 是一款分布式任务调度平台&#xff0c;用于解决分布式系统中的定时任务和异步任务调度问题。 它提供了任务的注册、调度、执行和监控等功能&#xff0c;能够帮助开发者…

激光打标机的维护与保养:确保设备长期稳定运行的关键

​ 激光打标机的维护与保养是确保设备长期稳定运行的关键&#xff0c;以下是一些关键的维护和保养步骤&#xff1a; 一、定期清洁 1. 清洁镜片&#xff1a;定期清洁激光打标机的镜片是维护保养的重要环节。使用纯净的酒精或专用的激光镜片清洗剂&#xff0c;轻轻擦拭镜片表面&…

WPS制作甘特图

“ 甘特图&#xff08;Gantt chart&#xff09;又称为横道图、条状图&#xff08;Bar chart&#xff09;&#xff0c;通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。” 设置基础样式 设置行高 设置宽度 准备基础数据 计算持续时间 …

C语言数组—二维数组

二维数组的创建 //数组创建 int arr[3][4]; //三行四列&#xff0c;存放整型变量 double arr[2][4];二维数组的初始化 我们如果这样初始化&#xff0c;效果是什么样的呢 int arr[3][4] { 1,2,3,4,5,6,7,8,9,10,11,12 };那如果我们不写满十二个呢 int arr[3][4] { 1,2,3,4…

超实用!免费软件站大盘点,总有一款适合你

相信用Mac电脑的同学都知道一个网站MacWK&#xff0c;可以白嫖几乎所有常用软件&#xff0c;不用付费&#xff0c;但不好的消息是在2022年10月宣布关站&#xff0c;小编从此走上了开源免费的道路&#xff0c;尽管不太好用&#xff0c;奈何口袋木有钱&#xff0c;经过小编的不断…

一个页面请求从在浏览器中输入网址到页面最终呈现

前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&#xff0c;我们往往容易陷入工作的漩涡&#xff0c;忘记了停下脚步&#xff0c;感受周围的世界。让我们一起提醒自己&#xff0c;要适时放慢脚步…