鸿蒙应用开发前置学习-TypeScript

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

专栏地址: https://blog.csdn.net/qq_56760790/category_12794123.html

前置课是关于TypeScript的基础教学,因为鸿蒙的ArkTS是TypeScript的超集,语法有些类似,所以大家如果对TS不熟悉,也可以看下前置课

目录

1. TypeScript介绍

1.1 TypeScript好处

1.2 TypeScript的使用场景

1.3 TypeScript的编译环境

1.3.1 搭建手动编译环境

1.3.2 搭建工程化下的自动编译环境

2. TypeScript的类型注解

2.1 TS支持的常用类型注解

2.2 类型注解的作用是什么

2.3 类型注解讲解

2.3.1 简单类型

2.3.2 数组

2.3.3 函数类型

2.3.4 联合类型

2.3.5 类型别名

2.3.6 接口类型

2.3.7 字面量类型

2.3.8 any类型

2.3.9 类型断言

2.3.10 泛型

2.3.10.1 泛型别名

2.3.10.2 泛型函数

2.3.10.3 泛型约束

3. TypeScript面向对象编程的基本语法

3.1 定义枚举

3.2 定义接口

3.3 实现接口

3.4 定义类

4. TypeScript的条件控制

4.1 if-else

4.2 switch

5. TypeScript的循环遍历

5.1 for循环遍历

5.2 while循环遍历

5.3 数组快捷迭代

6. 学习地址


1. TypeScript介绍

TypeScript 由微软开发的自由和开源的编程语言。

TypeScript 是 JavaScript 的一个超集。它对JavaScript进行了扩展,向JavaScript中引入了类型的概念,并添加了许多新的特性。

// 这是JavaScript,是弱类型语言,变量可以赋不同类型的值
let username='张三'
username =1
// TypeScript是强类型语言,变量不能给随意类型赋值let username:string='张三'username=1

TypeScript代码需要通过编译器编译为 JavaScript,然后再交由 JavaScript解析器执行。

TypeScript完全兼容 JavaScript,换言之,任何的TypeScript代码都可以直接当成 JavaScript使用。

1.1 TypeScript好处

  • TypeScript可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率;
  • 良好的代码提示,提升开发效率;
  • TypeScript代码可以编译为任意版本的JavaScript代码,可有效解决不同JavaScript运行环境的兼容问题;

1.2 TypeScript的使用场景

  • TS适合用来开发中大型项目
  • 开发通用的JS代码库
  • 团队协作开发

1.3 TypeScript的编译环境

TS编写的代码是无法直接在JS引擎(浏览器/NodeJs)中运行的,最终还需要经过编译变成JS代码才可以正常运行

1.3.1 搭建手动编译环境

1、本地环境需要安装npm工具,我们通过npm来进行安装

npm install -g typescript

2、安装好了之后,可以查看版本号

tsc -v

3、新增hello.ts文件,执行tsc hello.ts 命令生成hello.js文件

4、在终端输入node hello.js就能运行

1.3.2 搭建工程化下的自动编译环境

基于工程化的TS开发模式(webpack/vite),TS的编译环境已经内置了,无需手动安装配置

以下是创建一个最基础的自动化的TS编译环境

npm create vite@latest ts-demo3 -- --template vanilla-ts

1、npm create vite@latest 使用最新版本的vite创建项目

2、起个项目名称

3、 -- --template vanilla-ts 创建项目使用的模板为原生ts模板

项目搭建好了之后可以cd 到当前项目路径下执行以下指令

npm install

npm run dev

2. TypeScript的类型注解

2.1 TS支持的常用类型注解

JS已有类型

1、简单类型

number string boolean null undefined

2、复杂类型

数组 函数

TS新增类型

联合类型、类型别名、接口、字面量类型、泛型、枚举、void、any

2.2 类型注解的作用是什么

限制变量能赋值的数据类型并给出提示

语法:变量:类型

2.3 类型注解讲解

2.3.1 简单类型

let age:number
age=1
let isLoading:boolean
isLoading=false
let name:string
name='小头'

2.3.2 数组

// 推荐第一种写法
let arr:number[]=[1,2]
let test:Array<number>=[1,2]

2.3.3 函数类型

函数类型是指给函数添加类型的注解,本质上就是给函数的参数和返回值添加类型的约束

function add(a:number,b:number):number{return a+b;
}
let sum:number=add(1,2)

函数表达式写法

  • 分开写法
const add= (a:number,b:number):number =>{return a+b;
}
  • 整体写法
type addFn=(a:number,b:number)=>number
const add :addFn=(a,b) =>{return a+b;
}
  • 函数-可选参数

可选参数表示当前参数可传可不传,一旦传递实参必须保证参数类型正确,可选参数必须在函数末尾

// 可选参数
function add(a:number,b?:number):number{if(b){return a+b;}return a;
}
  • 函数-无返回值
function eachArr(arr:number[]):void{arr.forEach((item)=>console.log(item))
}

2.3.4 联合类型

将多个类型合并为一个类型对变量进行注解

// 例子1
let arr:(number|string)[]=[1,2,'小头']
// 例子2
let arr:number|string[]
arr=1
arr=['小头']

2.3.5 类型别名

通过type关键字给写起来较复杂的类型起一个其他的名字,用来简化和复用类型

type ItemType=(string|number)[]
let arr:ItemType=[1,2,'小头']

类型别名注解对象

在TS中对于对象数据的类型注解,除了使用interface之外还可以使用类型别名来进行注解,作用相似

type Boy={name:stringage:number
}
const boy:Boy={name:"小头",age:18
}

2.3.6 接口类型

在TS中使用interface接口来描述对象数据的类型(常用于给对象的属性和方法添加类型约束)

interface LoginForm{name:stringpassword:string
}
const form:LoginForm={name:"小头",password:"123456"
}

接口类型的可选参数写法

interface LoginForm{name:stringpassword?:string
}
const form:LoginForm={name:"小头"
}

接口的继承

接口的很多属性是可以进行类型复用的,使用extends实现接口继承,实现类型复用

interface Boy{name:stringage:number
}
interface People extends Boy{sex:number
}const people:People={name:"小头",age:18,sex:1
}

2.3.7 字面量类型

使用js字面量作为类型对变量进行类型注解,这种类型就是字面量类型,字面量类型比普通类型更加精确

// 普通number类型
let age:number=10
age=20
// 字面量类型,age1报错
let age1:10
age1=20

字面量类型的使用 一般都是和联合类型搭配使用

type Sex ='男'|'女'
let sex:Sex='女'

2.3.8 any类型

变量被注解为any类型之后,TS会忽略类型检查,错误的类型赋值不会报错,也不会有任何提示

let age:anyage=100age='小头'

注意:any的使用越多,程序可能出现的漏洞越多,建议避免使用

2.3.9 类型断言

有时候开发者比TS本身更清楚当前的类型是什么,可以使用断言as让类型更加精确和具体

let someValue: any = 'this is a string';
let strLen: number = (someValue as string).length;

2.3.10 泛型

泛型是指在定义接口、函数等类型的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性,使用泛型可以复用类型并且让类型更加灵活

// 定义泛型
interface ResData<T>{message:stringcode:numberdata:T
}interface User{username:stringpassword:string
}const resData:ResData<User>={message:'成功',code:200,data:{username:'张三',password:'123456'}
}

2.3.10.1 泛型别名

在类型别名type的后面使用<T>即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型

// 定义泛型
type ResData<T> ={message:stringcode:numberdata:T
}type User={username:stringpassword:string
}let resData:ResData<User>={message:'成功',code:200,data:{username:'张三',password:'123456'}
}
2.3.10.2 泛型函数

在函数名称的后面使用<T>即可声明一个泛型函数,整个函数中(参数、返回值、函数体)的变量都可以使用该函数的类型

function add<T> (b:T){console.log(b)
}
add(1)
add('1')
2.3.10.3 泛型约束

泛型的特点就是灵活不确定,有些时候泛型函数的内部需要访问一些特定类型的数据才有的属性,此时会有类型错误,需要通过泛型约束解决

function demo<T extends Length>(a:T){
console.log(a.length);}demo('小头')interface Length{length:number}

3. TypeScript面向对象编程的基本语法

TS具备面向对象编程的基本语法,例如interface、class、enum等,也具备封装、继承、多态等面向对象基本特征

3.1 定义枚举

enum Code{SUCCESS=200,FAIL=500
}

3.2 定义接口

// 定义接口,抽象方法
interface A{sleep(people:string):void
}

3.3 实现接口

// 定义接口,抽象方法
interface A{sleep(people:string):void
}
// 实现接口
class B implements A{sleep(people: string): void {console.log(people);}
}
// 初始化对象let a:A=new B()
a.sleep('小头')

3.4 定义类

// 定义一个类
class People{// 成员变量private username:stringprivate password:string// 构造方法constructor(username:string,password:string){this.username=usernamethis.password=password}// 成员方法public sleep():void{console.log(this.username+'睡觉了');}
}let people:People=new People('张三',"123");
people.sleep()

4. TypeScript的条件控制

4.1 if-else

let num:number=21
if(num>0){console.log(num +'是正数')}else if(num<0){console.log(num+'是负数');}else{console.log(num+'为0');}

4.2 switch

let grade:string='A'
switch(grade){case 'A':{console.log('优秀')break}case 'B':{console.log('合格')break}case 'C':{console.log('不合格')break}default:{console.log('输入错误')break}
}

5. TypeScript的循环遍历

TS支持for和while循环,并且为一些内置类型如Array等提供了快捷迭代的语法

5.1 for循环遍历

for(let i=1;i<10;i++){console.log(i);
}

5.2 while循环遍历

let i=1;
while(i<=10){console.log(i);i++;
}

5.3 数组快捷迭代

// 定义数组
let names:string[]=['小头','张三']
// for in迭代器
for(const i in names){console.log(i+':'+names[i]);}
// for of 迭代器
for(const name of names){console.log(name);}

6. 学习地址

全网首发鸿蒙NEXT星河版零基础入门到实战,2024年最新版,企业级开发!视频陆续更新中!_哔哩哔哩_bilibili

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

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

相关文章

数据安全新攻略!4大神技在手,固态硬盘数据恢复秒变Easy Mode

现在咱们都离不开电脑和手机了&#xff0c;里面存了好多重要的东西&#xff0c;比如学习资料、工作文件&#xff0c;还有照片、视频这些宝贵的记忆。但是有时候数据可能会不小心弄丢或者删掉&#xff0c;特别是在固态硬盘上的数据&#xff0c;要是没了&#xff0c;想找回来比老…

Sui主网升级至V1.34.2

Sui主网现已升级至V1.34.2版本&#xff0c;同时协议升级至60版本。其他升级要点如下所示&#xff1a; 协议 #19014: 在验证Groth16 zk-proof时对无效公共输入进行快速判断。添加了一个新的Move函数flatten&#xff0c;可将向量中的向量展平成单个向量&#xff0c;这在新协议…

爬虫——爬取小音乐网站

爬虫有几部分功能&#xff1f;&#xff1f;&#xff1f; 1.发请求&#xff0c;获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码 2.解析我们想要的数据 3.按照需求保存 注意&#xff1a;开始爬虫前&#xff0c;需要给其封装 headers {User-…

计算机网络:计算机网络体系结构 —— OSI 模型 与 TCP/IP 模型

文章目录 计算机网络体系结构OSI 参考模型TCP/IP 参考模型分层的必要性物理层的主要问题数据链路层的主要问题网络层的主要问题运输层的主要问题应用层的主要问题 分层思想的处理方法发送请求路由器转发接受请求发送响应接收响应 计算机网络体系结构 计算机网络体系结构是指将…

12.Velodyne16线激光雷达在ROS下的仿真(使用 URDF 描述和 Gazebo 插件来模拟 Velodyne 激光扫描仪)

1 下载VLP16的模型描述文件 在这个网站上进行下载&#xff1a; Bitbuckethttps://bitbucket.org/DataspeedInc/velodyne_simulator/src/master/ 使用 URDF 描述和 Gazebo 插件来模拟 Velodyne 激光扫描仪&#xff01; 下图是一个官方给的效果。 URDF with colored meshe…

嵌入式外设应用(代码)

文章目录 1. 工业自动化2. 智能家居设备3. 汽车电子4. 生命体征监测仪5. 物联网应用嵌入式外设应用广泛,有很多应用领域: 1. 工业自动化 应用场景:使用传感器监测设备状态,控制电机的启动和停止。 示例代码: #include <stdio.h> #include <stdbool.h>// 模…

Android 日志打印频率过高排查的一些技巧

最近项目快到 sop 阶段了&#xff0c;看到最近的一个新的任务&#xff0c;提示应用打印频率每秒超过 100 行/秒&#xff0c;需要优化一下。 那这样看起来需要删减一点日志&#xff0c;是不是先要找一下我们的应用打印了多少。 当然如果项目是自己维护的&#xff0c;那肯定是知…

java中创建不可变集合

一.应用场景 二.创建不可变集合的书写格式&#xff08;List&#xff0c;Set&#xff0c;Map) List集合 package com.njau.d9_immutable;import java.util.Iterator; import java.util.List;/*** 创建不可变集合:List.of()方法* "张三","李四","王五…

Let‘s Encrypt 的几个常用命令

Lets Encrypt 是免费的 ssl 证书提供商&#xff0c;在当前纷纷收费的形式下&#xff0c;这是一个良心厂家&#xff0c;虽然使用起来略微繁琐。坚决抵制某 cxxn 站&#xff0c;竟然开始有辣么多收费的东西。这里记录几个常用的命令&#xff08;使用环境Ubuntu 24&#xff09;&am…

MySQL高阶2041-面试中被录取的候选人

目录 题目 准备数据 分析数据 总结 题目 编写解决方案&#xff0c;找出 至少有两年 工作经验、且面试分数之和 严格大于 15 的候选人的 ID 。 可以以 任何顺序 返回结果表。 准备数据 Create table If Not Exists Candidates (candidate_id int, name varchar(30), yea…

给大家提个醒!!!

前些天在某鱼买了一个KNX路由器&#xff0c;外观看起没什么问题&#xff0c;但内部就大跌眼镜了。 话不多说&#xff0c;直接上图 拿到手&#xff0c;外壳看起来没有什么问题 . 上电只亮灯 之后插网线&#xff0c;路由器上找不到设备 开壳&#xff0c;惊掉下巴 加个PHY…

利用自动化工具增强防火墙管理

在选择下一代防火墙以平衡安全需求和网络性能时&#xff0c;组织应优先考虑哪些因素&#xff1f; 最重要的部分——安全需求、可用性和网络性能必须保持平衡&#xff0c;而找到共同点并不总是那么容易。 选择防火墙时&#xff0c;组织必须采取的第一步是深入了解现有网络基础…

广联达 Linkworks办公OA Service.asmx接口存在信息泄露漏洞

漏洞描述 广联达科技股份有限公司以建设工程领域专业应用为核心基础支撑&#xff0c;提供一百余款基于“端云大数据”产品/服务&#xff0c;提供产业大数据、产业新金融等增值服务的数字建筑平台服务商。广联达OA存在信息泄露漏洞&#xff0c;由于某些接口没有鉴权&#xff0c…

基于 STM32F407 的串口 IAP

目录 一、概述二、IAP 实现三、IAP 程序1、串口部分2、iap 程序3、内部 flash 读写4、main 程序 IAP&#xff08;In Application Programming&#xff0c;在应用编程&#xff09;是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写。简单来说&#xff0c;就是开发者…

红外画面空中目标检测系统源码分享

红外画面空中目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

Spring Boot助力IT领域交流平台开发

2 系统关键技术 2.1 JAVA技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xff0c;…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

开放式耳机的优缺点?哪个品牌专业?好用的开放式蓝牙耳机分享

我相信很多想入手的开放式耳机的家人都想知道开放式耳机是什么&#xff0c;开放式耳机有什么优缺点&#xff0c;开放式耳机是不是智商税、值不值得购买以及如果要购买的话&#xff0c;有什么专业的开放式耳机品牌推荐。因为我毕竟是测评过三十多款开放式耳机的数码博主&#xf…

mdm监管锁系统功能说明

普通用户后台功能说明 设备管理 设备列表 添加的设备列表 点击序列号可以进入设备详细信息 可以修改设备使用人的姓名 手机号 分组等 还可以导出报表 设备信息 展示了一些设备信息和可以下发指令 指令说明 指令分为异步和非异步 下发指令是和手机设备有交互&#xff0c;一…

使用默认不可变的Rust变量会踩什么坑

讲动人的故事&#xff0c;写懂人的代码 Rust的变量真的是名不副实。名字中明明有个“变”字&#xff0c;却默认不可变。还美其名曰“不可变变量”。要想让变量名副其实&#xff0c;还必须费心额外加个mut关键字&#xff0c;并必须称其为“可变变量”&#xff0c;才能与前者区分…