当前位置: 首页 > news >正文

鸿蒙开发 TypeScript 基础语法

文章的最下面有官网链接可以进行练习!

变量声明

TypeScript 在 JavaScript 的基础上加入了静态类型检查功能,因此每一个变量都有固定的数据类型

let:声明变量的关键字,const则代表常量

示例代码:

// string:字符串,可以用单引号或双引号
let msg: string = 'hello world'
// number:数值,整数、浮点数都可以
let age: number = 21
// boolean:布尔
let finished: boolean = true
// any:不确定类型,可以是任意类型
let a:any = 'jack'
a = 21
// uniton:联合类型,可以是多个指定类型中的一种
let u: string|number|boolean = 'rose'
u = 18
// Object:对象
let p = {name: 'Jack', age: 21}
console.log(p.name)
console.log(p['name'])
// Array:数组,元素可以是任意其他类型
let names: Array<string> = ['Jack', 'Rose']
let ages: number[] = [21,18]
console.log(names[0])

条件控制

TypeScript 与大多数开发语言类似,支持基于 if - else 和 switch 的条件控制

if - else 示例代码

// 定义数字
let num:number = 21
// 判断是否是偶数
if(num % 2 === 0) {console.log(num + '是偶数')
} else {console.log(num + '是奇数')
}
// 判断是否是正数
if(num > 0) {console.log(num + '是正数')
} else if(num < 0){console.log(num + '是负数')
} else {console.log(num + '为0')
}

switch 示例代码

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

循环迭代

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

 普通循序

// 普通 for
for(let i = 1; i <= 10; i++){console.log('点赞' + i + '次')
}
// while
let i = 1;
while(i <= 10){console.log('点赞' + i + '次')i++;
}

for 迭代器

// 定义数组
let names: string[] = ['Jack', 'Rose']
// for in 迭代器,遍历得到数组角标
for (const i in names) {console.log(i + ':' + names[i])
}
// for of 迭代器,直接得到元素
for (const name of names) {console.log(name)
}

函数

TypeScript 通常利用 function 关键字声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法

定义函数

// 无返回值函数,返回值 void 可以省略
function sayHello(name: stirng): void{console.log('你好,' + name + '!')
}
sayHello('Jack')
// 有返回值函数
function sum(x: number,y: number): number {return x + y
}
let result = sum(21,18)
console.log('21 + 18 =' + result)
// 箭头函数
let sayHi = (name: string) =>{console.log('你好,' + name + "!")
}
sayHi('Rose')

函数 - 可选参数

// 可选参数,在参数名后加 ?,表示该参数是可选的
function sayHello(name?: stirng){// 判断 name 是否有值,如果无值则给一个默认值name = name ? name : '陌生人'console.log('你好,' + name + '!')
}
sayHello('Jack')
sayHello()

函数 - 参数默认值

// 参数默认值,在参数后面赋值,表示参数默认值
// 如果调用者没有传参,则使用默认值
function sayHello(naem: string = '陌生人'){console.log('你好,' + name + ':')
}
sayHello('Jack')
sayHello()

类和接口

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

类、接口、枚举

// 定义枚举
enum Msg{HI = 'Hi',HELLO = 'Hello'
}
// 定义接口,抽象方法接收枚举参数
interface A {say(msg: Msg):void
}
// 实现接口
class B implements A {say(msg: Msg): void {console.log(msg + ',I am B')}
}
// 初始化对象
let a:A = new B()
// 调用方法,传递枚举参数
a.say(Msg.HI)

继承

// 定义矩形类
class Rectangle {// 成员变量private width: numberprivate length: number// 构造函数constructor(width: number, length: number) {this.width = widththis.length = length}// 成员方法public area(): nuber{return this.width * this.length}
}
// 定义正方形
class Square extends Rectangle{constructor(side: number) {// 调用父类构造super(side, side)}
}let s =new Square(10)
console.log('正方形面积为:' + s.area())

模块开发

应用复杂时,我们可以把通用功能抽取到单独的ts文件中,每个文件都是一个模块(module);模块可以相互加载,提供代码复用性

rectangle.ts

// 定义矩形类,并通过 export 导出
export class Rectangle {// 成员变量public width: numberpublic length: number// 构造函数constructor(width: number, length: number) {this.width = widththis.length = length}
}
// 定义工具方法,求矩形面积,并通过 export 导出
export function area(rec: Rectangle): number{return rec.width * rec.length
}

index.ts

// 通过 import 语法导入,from 后面写文件的地址
import {Rectangle, area} from './rectangle'
// 创建 Rectangle 对象
let r = new Rectangle(10, 20)
// 调用 area 方法
console.log('面积为:' + area(r))

我们可以通过链接进入官网:TypeScript: TS Playground - 用于探索 TypeScript 和 JavaScript 的在线编辑器 (typescriptlang.org) 进行练习 

如想了解更多 TypeScript 语言可以通过官网:TypeScript: The starting point for learning TypeScript (typescriptlang.org)了解更多

相关文章:

鸿蒙开发 TypeScript 基础语法

文章的最下面有官网链接可以进行练习&#xff01; 变量声明 TypeScript 在 JavaScript 的基础上加入了静态类型检查功能&#xff0c;因此每一个变量都有固定的数据类型 let&#xff1a;声明变量的关键字&#xff0c;const则代表常量 示例代码&#xff1a; // string&#…...

uniapp 未配置appkey或配置错误的解决

报错解决&#xff1a;未配置appkey或配置错误 首先&#xff1a;HbuilderX Android sdk 3.1.10版本起需要申请Appkey 配置Appkey&#xff1a;打开Androidmanifest.xml&#xff0c; 导航到Application节点&#xff0c;创建meta-data节点&#xff0c;name为dcloud_appkey&#x…...

【Android】【Bluetooth Stack】蓝牙电话协议之拨打电话分析(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待! 目录 1. 协议架构 1.1 Profile Dependencies...

记录关于智能家居的路程的一个bug___Segmentation fault(段错误)

前言 其实发生段错误的情况有很多&#xff1a; 其实在项目的开发中最有可能的错误就是①和②&#xff0c;考虑到本项目数组用的比较少&#xff0c;所以主要是考虑错误①指针的误用。 有时候错误就是那么离谱&#xff0c;声音也算是一种设备&#xff1f;&#xff1f;&#xff…...

由浅到深认识Java语言(39):网络编程

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…...

PCL 彩色点云RGB转灰度并显示

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 不同要素之间的灰度差异较为明显。点云灰度值与RGB属性的关系为:...

RHEL9部署Docker环境

华子目录 Docker引擎架构docker引擎架构示意图执行过程示例 RHEL9上安装Docker1.系统要求2.安装yum-utils工具包3.yum安装docker-ce4.配置docker镜像加速docker拉取镜像的过程配置阿里云镜像仓库重新加载守护进程重启Docker服务 5.拉取并运行hello-world镜像6.测试是否安装成功…...

Vue3.0云里雾里

目录:一篇通识Vue3.0 1.OptionsAPI(选项式)和CompositionAPI(组合式) 2.setup setup语法糖 ref响应式数据 reactive只能定义对象类型的响应式数据(用情专一) toRefs解构 计算属性computed watch侦听 WatchEffect 标签的Ref属性 组件上的ref就是获取组件实例…...

idea类已经存在却报错

一句话导读 在idea中导入新的项目&#xff0c;很多类都飘红报错&#xff0c;mvn compile可以通过&#xff0c;可能是因为idea缓存问题导致。 由于这个项目是由老项目复制过来后&#xff0c;再继续开发新的功能&#xff0c;很多同事导入后&#xff0c;都爆出新的类找不到。而编译…...

MySQL---视图

目录 一、介绍 二、语法 三、视图的更新 四、视图作用 一、介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#…...

策略路由-IP-Link-路由协议简介

策略路由 策略路由和路由策略的不同 1.策略路由的操作对象是数据包&#xff0c;在路由表已经产生的情况下&#xff0c;不按照路由表进行转发&#xff0c;而是根据需要&#xff0c;依照某种策略改变数据包的转发路径 2.路由策略的操作对象是路由信息。路由策略的主要实现了路…...

数位五五(Java)

数位五五 题目描述 求出[a,b]区间内有多少个数数位之和为 55 的倍数。 输入格式 输入一行包含两个整数a &#xff0c;b。 输出格式 输出一个整数。 样例输入输出 样例输入 10 20样例输出 2数据范围 对于 100% 的数据&#xff0c;保证 1≤a≤b≤1000000。 样例解释 …...

蓝桥杯G431RBT6——定时器中使用led冲突以及led与lcd冲突等一系列问题

本文是解决 同时在 定时器中点灯 与 LCD屏幕显示 冲突异常的问题 我们大家都知道&#xff0c;G431RBT6开发板上led与lcd是冲突的&#xff0c;所以在lcd.c文件中的这三个函数中 void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue) void LCD_WriteRAM_Prepare(void) void LCD_Wr…...

物联网(IoT)常用的通信协议

物联网&#xff08;IoT&#xff09;的通信协议是物联网设备之间交换数据的规则和标准。这些协议对于确保设备能够有效、安全地通信至关重要。下面是物联网通信协议的概述&#xff1a; 1. MQTT&#xff08;消息队列遥测传输&#xff09; 概述&#xff1a;MQTT是一种轻量级的发…...

关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配

在 Windows 平台上面建议通过 VirtualAlloca、VirtualAllocaEx 核心库函数来分配虚拟内存&#xff0c;而不是通过 MMF&#xff08;Memory Mapping File / 内存映射文件&#xff09;技术来载入虚拟内存。 这是因为&#xff0c;在 Windows 平台上面&#xff0c;通过MMF技术分配的…...

如何在服务器上传/下载文件

从服务器下载文件到本地 打开xshell&#xff0c;输入&#xff1a;ssh root159.xxx.xxx.xx 然后需要输入密码 cd到目录文件夹下 cd /enmotech apt install zip zip -r uploads.zip uploads apt install lrzsz sz uploads.zip 从本地上传文件到服务器 如果文件是放在E盘…...

C++ 之多态虚函数原理及应用

文章目录 多态基本概念和原理虚函数的基本原理和概念虚析构和纯虚析构多重继承中的虚函数小结 多态基本概念和原理 多态的基本概念 **多态是C面向对象三大特性之一** 多态的定义 多态是一种面向对象编程概念&#xff0c;指同一个行为&#xff08;方法&#xff09;在不同的对象上…...

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去&#xff0c;让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的&#xff0c;今天在亮数据中看到了个【…...

spring boot-引入Redis并封装redistemplate操作工具类

文章目录 一、关于spring-redis二、springboot引入Redis及其使用案例三、封装redistemplate操作工具类 一、关于spring-redis spring-data-redis针对jedis提供了如下功能&#xff1a; 连接池自动管理&#xff0c;提供了一个高度封装的“RedisTemplate”类 针对jedis客户端中大…...

android 11 SystemUI 状态栏打开之后的界面层级关系说明之一

比如WiFi 图标的父layout为&#xff1a; Class Name: ButtonRelativeLayout Class Name: QSTileView Class Name: TilePage Class Name: PagedTileLayout Class Name: QSPanel Class Name: NonInterceptingScrollView Class Name: QSContainerImpl Class Name: FrameLayout Cl…...

pyqt 风格

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 样式模块 定义全局样式表和动态样式生成 """from typing import Dictclass StyleManager:"""样式管理器"""# 颜色常量COLORS {bg_dark: #0F172A,bg_medium:…...

不用写代码,也能做学生画像分析?用助睿BI完成考勤高危群体可视化实战

一、前言&#xff1a;为什么要做学生考勤画像分析&#xff1f; 在校园管理场景中&#xff0c;学生考勤数据并不只是简单的“迟到、早退、请假、校服违规”记录。如果能够对这些数据进行系统化分析&#xff0c;就可以进一步发现不同学生群体的行为特征&#xff0c;例如哪些学生…...

FreeRTOS队列深度剖析:从环形缓冲区到任务阻塞,你的消息真的发对了吗?

FreeRTOS队列深度剖析&#xff1a;从环形缓冲区到任务阻塞&#xff0c;你的消息真的发对了吗&#xff1f; 在嵌入式实时系统中&#xff0c;任务间的通信机制如同城市中的交通网络&#xff0c;而FreeRTOS队列则是这条网络中最核心的高速公路。当你的系统从简单的单任务演变为多任…...

备考执业兽医考试哪里有免费资料可以领?

备战执业兽医考试&#xff0c;是不是还在四处搜罗备考资料&#xff1f;网上资源杂乱老旧、版本参差不齐&#xff0c;要么内容不全&#xff0c;要么找不到重点&#xff0c;浪费大把时间还没头绪。不用再盲目翻找、费心整理了&#xff01;给大家推荐一个能免费领执业兽医全科资料…...

FLUX.1-dev-Controlnet-Union:一站式多模态图像控制解决方案,让AI生成更精准可控

FLUX.1-dev-Controlnet-Union&#xff1a;一站式多模态图像控制解决方案&#xff0c;让AI生成更精准可控 【免费下载链接】FLUX.1-dev-Controlnet-Union 项目地址: https://ai.gitcode.com/hf_mirrors/InstantX/FLUX.1-dev-Controlnet-Union 你是否曾经在AI图像生成中遇…...

端到端关键词识别技术范式:WeKWS在边缘计算场景下的架构创新与实践

端到端关键词识别技术范式&#xff1a;WeKWS在边缘计算场景下的架构创新与实践 【免费下载链接】wekws Production First and Production Ready End-to-End Keyword Spotting Toolkit 项目地址: https://gitcode.com/gh_mirrors/we/wekws 在物联网设备普及的今天&#x…...

YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆

🚀 YOLO26 ONNX Runtime 部署实战:告别NMS后处理,边缘推理新标杆 摘要: Ultralytics 重磅推出的 YOLO26 不仅在精度上实现了代际飞跃,更在架构层面进行了颠覆性革新——彻底移除了传统的 NMS(非极大值抑制)后处理环节。本文将带你深入了解 YOLO26 的核心优势,并基于 …...

GitHub Desktop中文汉化终极指南:三分钟实现全界面中文化

GitHub Desktop中文汉化终极指南&#xff1a;三分钟实现全界面中文化 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desk…...

告别低速串口:用STM32的FSMC总线驱动FPGA,实现高速数据交换的完整流程(基于STM32F407)

STM32与FPGA的高速数据通道&#xff1a;基于FSMC总线的实战设计指南 在嵌入式系统开发中&#xff0c;数据吞吐量常常成为制约系统性能的关键瓶颈。当STM32微控制器需要与FPGA进行大数据量交互时——无论是实时图像处理、高速数据采集还是复杂算法加速——传统的串行通信接口如…...

国产车规芯片崛起,如何用东软睿驰NeuSAR或经纬恒润方案快速适配?

国产车规芯片与AUTOSAR方案融合实战&#xff1a;从芯驰MCU到NeuSAR/经纬恒润的适配指南 当一颗国产车规级MCU遇上自主AUTOSAR基础软件&#xff0c;这场"中国芯"与"中国魂"的相遇&#xff0c;正在重构汽车电子开发的成本结构与技术生态。去年某新能源车企的…...