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

news2024/11/24 16:32:20

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙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:string
  age:number
}
const boy:Boy={
  name:"小头",
  age:18
}

2.3.6 接口类型

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

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

接口类型的可选参数写法

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

接口的继承

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

interface Boy{
  name:string
  age: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:any
 age=100
 age='小头'

注意: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:string
  code:number
  data:T
}

interface User{
  username:string
  password:string
}

const resData:ResData<User>={
  message:'成功',
  code:200,
  data:{
    username:'张三',
    password:'123456'
  }
}

2.3.10.1 泛型别名

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

// 定义泛型
type ResData<T> ={
  message:string
  code:number
  data:T
}

type User={
  username:string
  password: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:string
  private password:string
  // 构造方法
  constructor(username:string,password:string){
    this.username=username
    this.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.coloradmin.cn/o/2186509.html

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

相关文章

杭州电子科技大学《2019年+2023年861自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《杭州电子科技大学861自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2019年真题 2023年真题 Part1&#xff1a;2019年2023年完整版真题 2019年真题 2…

【Linux私房菜(九)之进程间通信】

文章目录 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质进程间通信的分类 管道什么是管道匿名管道匿名管道的原理pipe函数匿名管道使用步骤管道读写规则管道的特点管道的四种特殊情况管道的大小 命名管道命名管道的原理使用命令创建命名管道创建一个命名管道…

会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰

调高分辨率后&#xff0c;mp4视频还是不清晰。哪怕全部使用4K级素材&#xff0c;仍然剪不出理想中的高画质作品。不是你的操作有问题&#xff0c;而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术&#xff0c;该公司研发的会声会影视频剪辑软件&#xff0c;在过去的20…

详解CSS中的伪元素

4.3 伪元素 可以把样式应用到文档树中根本不存在的元素上。 ::first-line 文本中的第一行 ::first-letter 文本中的第一个字母 ::after 元素之后添加 ::before 元素之前 代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8&q…

netty之Netty传输Java对象

前言 Netty在实际应用级开发中&#xff0c;有时候某些特定场景下会需要使用Java对象类型进行传输&#xff0c;但是如果使用Java本身序列化进行传输&#xff0c;那么对性能的损耗比较大。为此我们需要借助protostuff-core的工具包将对象以二进制形式传输并做编码解码处理。与直接…

无线物联网通信与智能家居

无线物联网通信技术与智能家居之间存在着密不可分的关系。无线物联网通信技术作为智能家居系统的核心支撑&#xff0c;为智能家居设备之间的互联互通提供了可能&#xff0c;从而实现了家居生活的智能化、便捷化和舒适化。 一、无线物联网通信技术在智能家居中的应用 1、传感器…

LabVIEW程序员从幼稚到成熟的标志是什么?

LabVIEW程序员从“幼稚”到“成熟”的转变标志主要体现在以下几个方面&#xff1a; 1. 系统性思维与架构设计 初学者通常会注重功能实现&#xff0c;常常直接编写功能模块&#xff0c;而忽略系统整体的架构设计。成熟的LabVIEW程序员则具备系统性思维&#xff0c;在开始编写代…

Ericsson EPSFB 通话掉话现象优化案例

Ericsson EPSFB 通话掉话现象优化案例 在移动通信网络中&#xff0c;用户体验的稳定性和通话质量至关重要。随着通信语言通话技术的发展&#xff0c;部分用户在通话时会遇到掉话现象&#xff0c;尤其是在采用EPSFB&#xff08;EvolvedPacket>System Fallback&#xff09;技术…

【WRF工具】cmip6-to-wrfinterm工具概述:生成WRF中间文件

cmip6-to-wrfinterm工具概述 cmip6-to-wrfinterm工具安装cmip6-to-wrfinterm工具使用快速启动&#xff08;Quick start&#xff09;情景1&#xff1a;MPI-ESM-1-2-HR&#xff08;默认&#xff09;&#xff1a;情景2&#xff1a;BCMM情景3&#xff1a;EC-Earth3 更改使用&#x…

SpringBoot框架下美容院管理系统的设计与实现

第二章 开发环境 对美容院管理系统进行开发&#xff0c;需要了解开发技术的理论与实际运用&#xff0c;对开发工具&#xff0c;尤其是数据库的使用方法需要进行掌握。 2.1 SpringBoot框架 SpringBoot框架的诞生是出于需要优化Spring框架的前提下&#xff0c;Spring框架随着时间…

【Simulink仿真】电池储能系统(BESS)与太阳能电站的SPS微电网模型

摘要 本文介绍了一个基于电池储能系统&#xff08;BESS&#xff09;与太阳能电站的微电网仿真模型。该模型使用SPS&#xff08;特殊保护系统&#xff09;进行模拟&#xff0c;能够在跟随电网和形成电网的两种模式下运行。微电网通过太阳能电站为主要能源&#xff0c;并结合了1…

ROS2功能包、节点、可执行程序是怎么来的、之间的关系是什么?详解!

在一个简单的ros2工作空间中&#xff0c;一般有一下几个文件夹&#xff0c; 1、src 2、install 3、build 4、log 其中&#xff0c;存放功能包项目的文件夹在src中&#xff0c;一般情况下&#xff0c;当我们要创建一个功能包项目的时候&#xff0c;要在src文件夹下输入以下…

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能&#xff1f; (baidu.com) 1 联接手机…

PTT 实验

1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. EXPLOIT 一般来说&#xff0c;通用的ptt有三种方法&#xff1a; impacketmimikatzcs 这里就以impacket为例。 0x1. 黄金票据 前提条件…

【SpringBoot详细教程】-09-Redis详细教程以及SpringBoot整合Redis【持续更新】

🌲 Redis 简介 🌾 什么是Redis Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote DictionaryServic…

FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片

现在社会对于居家消毒也越发重视起来。而居家消毒除了75%浓度酒精及各类消毒液外&#xff0c;利用紫外线灯给衣物表面、房间消毒也是一种很好的选择。FP7209 定位于低压线性恒流驱动&#xff0c;精度高、外围电路简单、使用方便且可靠性高&#xff0c;更可广泛应用于商业照明系…

【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}

1. 函数简介&#xff1a; Hive会将常用的逻辑封装成函数给用户进行使用&#xff0c;类似于Java中的函数。 好处&#xff1a;避免用户反复写逻辑&#xff0c;可以直接拿来使用。 重点&#xff1a;用户需要知道函数叫什么&#xff0c;能做什么。 Hive提供了大量的内置函数&am…

深度学习-19-深入理解并训练自己的Tokenizer分词器

文章目录 1 tokenization是什么2 Tokenization方法简介2.1 单词级的Tokenization2.2 子词Tokenization技术2.3 举例说明2.3.1 字符级别2.3.2 词语级别2.3.3 子词级别3 训练自己的Tokenizer3.1 下载数据集3.2 huggingface的Tokenizer实现3.3 my-tokenizer.json字段说明3.4 验证一…

猫猫cpu的缓存

原题过长&#xff0c;放一下题目大意 题目大意 给你 m m m 个 1 1 1 到 n n n 之间的整数&#xff0c;你要找到若干个大小为固定的 k k k 的闭区间&#xff0c;使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小&#xff0c;并输出此大小。本题里…

[RabbitMQ] Spring Boot整合RabbitMQ

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…