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

ArkTS 基础语法入门:变量声明与数据类型全解析

引言

ArkTS 是专门用于 HarmonyOS 应用开发的高级语言。在正式进入鸿蒙应用开发之前,掌握 ArkTS 的基础语法是必要的前提。本节课将从零基础出发,系统讲解 ArkTS 中变量与常量的声明规则、数据类型体系,以及类型安全、类型推断等核心概念,为后续鸿蒙应用开发打下基础。

核心内容

ArkTS 语言基础定位

ArkTS 是基于 TypeScript(简称 TS)扩展升级而来的高级语言,保留了 TS 的基础语法与风格,并新增了两大核心能力:

  • 静态类型检查:在编写代码时及时发现错误。

  • 自动类型推断:简化代码书写。

ArkTS 支持与 TS/JavaScript 高效互操作,可以完全复用现有的 TS/JS 生态,之前用 TS/JS 开发的代码和工具无需重写,可直接复用。

ArkTS 发展历程
阶段关键特性
API 9 版本开始支持声明式 UI 范式,提供声明式 UI 描述、状态管理、渲染控制等 UI 开发能力
API 10-12 版本新增静态类型检查、并发能力增强、空值安全等机制,进一步强化静态检查分析能力,优化并发编程 API
未来演进方向将持续迭代,逐步增加并发能力增强、系统类型增强、分布式开发范式等更多现代语言特性

变量与常量声明

在 ArkTS 中,变量是存储可变数据的"容器",常量是存储不可变数据的"容器"。

声明语法

变量声明:使用let关键字

let count: number = 0;

常量声明:使用const关键字

const MAX_COUNT: number = 100;
变量与常量的核心区别
特性变量(let声明)常量(const声明)
可变性可多次赋值声明后仅能赋值一次,不可修改
声明关键字letconst
命名规范推荐小驼峰命名(如userName推荐全大写 + 下划线分隔(如MAX_VALUE
性能优化运行时动态赋值编译时求值,减少运行时计算开销

示例

let count: number = 0; count = 40; // 允许重新赋值 const MAX_COUNT: number = 100; MAX_COUNT = 10; // 编译报错:无法给常量重新赋值

ArkTS 数据类型体系

ArkTS 的数据类型整体分为基本类型引用类型两大类,另有拓展类型用于特殊场景。

常用基本类型
类型用途示例
string存储文字信息(如商品标题、用户名)'Pura 80'
number存储数字信息,包括整数和小数(如商品价格、年龄)4894
boolean存储状态信息,仅truefalsetrue

使用示例

// 声明不同类型的变量 let title: string = 'Pura 80'; let price: number = 4894; let isChoose: boolean = true; // 控制台打印输出 console.log(title); // 输出: Pura 80 console.log(price.toString()); // 输出: 4894 // 模板字符串语法拼接变量 console.log(`The price of ${title} is ${price}`); // 输出: The price of Pura 80 is 4894

模板字符串说明:使用反引号(ESC 键下方的按键)包裹文本,插入变量使用${变量名}格式。

引用类型

引用类型不直接存储数据本身,而是在内存中存储数据的内存地址,通过引用访问实际数据,适合存储有层级或关联关系的复杂结构。

常用引用类型包括:ObjectArrayEnumClassFunction等。

Object 类型:通用类型,可以容纳任意类型的数据,自带通用方法(如toString())。

let obj: Object = { name: 'Pura 80', price: 4894 }; console.log(obj.toString());

注意:由于Object类型过于宽泛,编辑器无法做针对性类型检查,容易隐藏运行时错误,开发中应尽量少用,优先使用具体类型。

Array 类型:用于存储多个同类型数据,提供长度查询、增删元素等操作。

// 创建存储字符串的数组 let students: string[] = ['XiaoMing', 'XiaoZhang', 'XiaoWang', 'XiaoLi']; console.log(students.length); // 打印数组长度: 4 console.log(students[0]); // 打印索引为0的元素: XiaoMing students.push('XiaoHong'); // 添加元素 → 长度变为5 students.pop(); // 删除末尾元素 → 长度变为4
基本类型与引用类型的核心区别
类型存储方式赋值行为
基本类型直接存储数据值赋值时创建值的独立副本,修改新变量不影响原变量(值复制
引用类型存储数据的内存地址赋值时复制内存地址,多个变量指向同一块内存,修改会影响所有指向该地址的变量(地址复制

示例对比

// 基本类型 —— 值复制 let a: number = 10; let b: number = a; // b 得到 a 的独立副本 b = 20; // 修改 b,a 仍为 10 // 引用类型 —— 地址复制 let arr1: number[] = [1, 2]; let arr2: number[] = arr1; // arr2 与 arr1 指向同一个数组 arr2.push(3); // arr1 也变为 [1, 2, 3]

这是笔试和面试的高频考点,必须理解值复制和地址复制的不同效果。

拓展数据类型

枚举类型(Enum)

枚举类型是预先定义好的一组可选命名值,限制变量只能从预设选项中选择,避免非法值。

// 声明 Color 枚举类型,预设三个可选值 enum Color { Red, Blue, Green } // 只能从预设值中选择 let fontColor: Color = Color.Red;
联合类型

用于一个变量可能支持多种类型的场景,允许变量被赋值为多种指定类型中的任意一种。

let value: string | number; value = 'Hello'; // 合法 value = 42; // 合法 value = true; // 编译报错
类型别名

可以给已存在的类型起一个简洁易记的新名称,简化复杂类型的重复书写。

type ID = string | number; let userId: ID = 'abc123'; let productId: ID = 456;
类型安全

ArkTS 是静态类型安全语言,赋值类型不匹配时编译器会直接报错,提前发现问题,避免运行时出错。

let title: string = 'Pura 80'; title = 20; // 编译报错:类型不匹配
自动类型推导

声明变量并直接赋值时,即使不手动标注类型,编译器也会根据赋值内容自动推导变量类型。

// 未手动标注类型,编译器自动推导 meaningOfLife 为 number 类型 let meaningOfLife = 42;
类型断言

当开发者能通过逻辑确定变量的具体类型,但编译器无法自动判断时,可以使用类型断言明确告诉编译器变量的具体类型。

// 使用 as 关键字进行类型断言 let someObj: object = 'Hello World'; let value: string = someObj as string;

注意:如果开发者类型判断错误,会导致运行时错误。只有明确类型时才可以使用类型断言。

总结

本节课系统介绍了 ArkTS 的基础语法:

  1. ArkTS 语言定位:基于 TypeScript 扩展,新增静态类型检查和自动类型推断,兼容 TS/JS 生态。

  2. 变量与常量声明:使用let声明变量(可修改),使用const声明常量(不可修改)。常量推荐全大写 + 下划线命名。

  3. 数据类型体系:分为基本类型(stringnumberboolean)和引用类型(ObjectArrayEnum等)。基本类型为值复制,引用类型为地址复制。

  4. 拓展特性:包括枚举类型、联合类型、类型别名、类型安全、自动类型推导和类型断言。

http://www.cnnetsun.cn/news/3826898.html

相关文章:

  • COMSOL光子晶体能带计算原理与工程实践
  • 体验家XMPlus互联网医院在线问诊体验管理:从找医生到复诊的全旅程体验数据闭环
  • 战略管理全流程:从规划到落地的实战方法论
  • 5分钟掌握TTS-Backup:桌游模拟器的终极数据保护方案
  • League Akari:英雄联盟玩家的终极本地工具箱完整指南
  • 如何快速解决系统依赖问题:VisualCppRedist AIO终极解决方案指南
  • Ubuntu挂载Windows共享文件夹:CIFS协议原理与实战配置指南
  • 现代Windows下通过WinRing0驱动控制主板蜂鸣器硬件编程实践
  • DA-PCL-DA┃聚己内酯-二丙烯酸酯┃PCL两端修饰丙烯酸酯
  • 2026年阜阳市高新技术企业申报时间、条件、补贴指南
  • C++游戏开发实战:从零构建2D跑酷游戏核心框架与SFML应用
  • 售后有保障的志丹县家电门店
  • Unity URP全屏后处理特效:Blit Render Feature原理、实现与优化指南
  • OpenClaw v2026.3.24 全链路稳定性升级:从模型调用到通讯集成的深度优化
  • 大模型公司集体“造芯“:从 Google 到 DeepSeek,算力自主化成为行业主线
  • Windows服务启动错误1297:服务账户权限缺失的诊断与修复指南
  • HTTP请求中真实IP获取:REMOTE_ADDR、X-Forwarded-For等字段原理与实战
  • 普通人开服装公司到底要不要做GEO
  • 自动化缝制设备市场未来发展方向深度分析(2026–2032)
  • 零成本调用大语言模型API:免费资源盘点与实战接入指南
  • 米哈游秋招正式开始啦!
  • Codex进阶指南:从AI调用到自动化工作流的本地编排实践
  • 抖音内容保存全攻略:5分钟学会批量下载无水印视频的终极方案
  • 实验室采购必看!主流国产通用仪器、前处理、箱体设备知名品牌盘点
  • 论文分析笔记(《UAV-FlameNet:一种用于无人机航空火灾监测的轻量级高精度火焰检测模型》)
  • Docker部署Oracle数据库全攻略:从镜像选择到生产环境考量
  • DC53电渣重熔钢材:高性能工具钢的选材、热处理与应用指南
  • 三菱Q系列12轴伺服控制系统的配置与调试实践
  • Ubuntu系统glibc升级:从libc6版本冲突到安全升级方案详解
  • 零成本部署OpenClaw:本地AI助手搭建与实战指南