注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙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