TypeScript无缝衔接ArkTS:快速入门鸿蒙ArkTS基本语法

简介: 【10月更文挑战第12天】TypeScript无缝衔接ArkTS:快速入门鸿蒙ArkTS基本语法

大家好,我是石小石!经过前几节的教程,相信你已经对鸿蒙的开发、ArkTS语言、ArkUI有了一定的认识。这节教程,我们将正式学习ArkTS基础语法,丰富我们的技术栈!

TypeScript与ArkTS的关系

我们先看看官方是怎么介绍的:

image.png

简单来说,TypeScript 是一种通用的、基于 JavaScript 的编程语言,主要应用于前端开发中。ArkTS 则是专门为鸿蒙开发生态系统设计的,基于 TypeScript 的一种扩展语言,拥有更强的稳定性和安全性。

ArkTS的基本语法

作为前端,我们上手ArkTS基本语法是非常容易的!首先,ArkTS是兼容TS/JavaScript生态的,我们可以使用TS/JS进行开发或复用已有代码,但是要注意一些约束规则:兼容TS/JS的约束

当然,都学习ArkTS了,还使用js就太丢人了,我们来快速入门ArkTS的基本语法吧!

基础语法

类型声明

变量声明

let a: string = '你好,我是石小石';
// 更改值
a = '溜了溜了,学个毛线';

常量声明

以关键字const开头的声明引入只读常量,不能修改。

const b: string = '卷不动了!不学了';
// 改值会报错
b = "我好难" // 报错

类型

类型名称 描述 示例值
Number类型 表示整数和浮点数,支持十进制、二进制、八进制和十六进制的字面量。 let num: number = 3.14;
Boolean类型 逻辑类型,包含 truefalse 两个值。 let isDone: boolean = false;
String类型 表示字符序列,可以使用单引号、双引号或反引号(模板字面量)括起来。 let greeting: string = "Hello";
Void类型 指定函数没有返回值。只有一个值 void function log(): void {}
Object类型 所有引用类型的基类型。 let obj: Object = { key: "value" };
Array类型 表示由同类型元素组成的集合。 let arr: number[] = [1, 2, 3];
Enum类型 枚举类型,定义一组命名值。 enum Color { Red, Green, Blue } let c: Color = Color.Red;
Union类型 联合类型,由多个类型组成,变量可以是这些类型之一。 `type ID = string
Aliases类型 为匿名类型或已有类型提供别名。 type Point = { x: number, y: number }; let p: Point = { x: 10, y: 20 };

运算符

比较运算符

运算符 说明
=== 如果两个操作数严格相等(不同类型的操作数是不相等的),则返回true。
!== 如果两个操作数严格不相等(不同类型的操作数是不相等的),则返回true。
== 如果两个操作数相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
!= 如果两个操作数不相等(尝试先转换不同类型的操作数,再进行比较),则返回true。
> 如果左操作数大于右操作数,则返回true。
>= 如果左操作数大于或等于右操作数,则返回true。
< 如果左操作数小于右操作数,则返回true。
<= 如果左操作数小于或等于右操作数,则返回true。

算术运算符

运算符 说明
+ 加法
- 减法
* 乘法
/ 除法
% 除法后余数

逻辑运算符

运算符 说明
a && b 逻辑与
a b 逻辑或
! a 逻辑非

常用语句

If语句

const study:boolen = fasle
const work:boolen = fasle

if (study) {
   
  // ...
} else if (work) {
   
  // ...
} else {
   
  // ...
}

Switch语句


const expression:string = "game"
switch (expression) {
   
  case "study": 
    // 学习鸿蒙
    // ...
    break; // 可省略
  case "work":
  case "game": 
    // 打游戏逻辑
    // ...
    break; // 可省略
  default:
    // 默认语句
}

三元运算符

let money:number = 0
let work = money < 10 ? true : false;

for语句

let sum = 0;
for (let i = 0; i < 10; i += 2) {
   
  sum += i;
}

For-of语句、While语句、Do-while、Try语句这些和前端一样,就不一一介绍了!

函数

ArKts的函数语法同样和Ts是几乎一致的

  • 函数声明
function add(x: string, y: string): string {
  // 支持js的模板字符串
  return `${x}${y}`;
}
  • 可选参数
function getName(name?: string) {
   
  if (name == undefined) {
   
    console.log('我槽!居然没名字');
  } else {
   
    console.log(`大家好, ${
     name}!`);
  }
}
  • 返回类型
// 显式指定返回类型
function game(): string {
    return '打游戏'; }

// 推断返回类型为string
function study() {
    return '学习鸿蒙'; }
  • 箭头函数
let sum = (x: number, y: number): number => {
   
  return x + y;
}
// 省略写法
let sum = (x: number, y: number): number => x + y
  • 函数重载

函数重载是java才具备的能力,然后Arkts也是支持的,这一点非常舒服。

我们只需要为同一个函数写入多个同名但签名不同的函数头,函数实现紧随其后就可以实现函数重载效果

// 定义函数重载
function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: any, b: any): any {
   
    return a + b;
}

// 使用函数重载
let sum = add(5, 10);        // 调用第一个重载函数,返回数值 15
let concatenated = add("Hello, ", "World!");  // 调用第二个重载函数,返回字符串 "Hello, World!"

console.log(sum);           // 输出: 15
console.log(concatenated);  // 输出: Hello, World!

  • 类的基本定义

与 TypeScript 类似,ArkTS 中使用 class 关键字定义类。类可以包含构造函数、属性和方法。

class Person {
   
    name: string;
    constructor(name: string) {
   
        this.name = name;
    }

    greet(): string {
   
        return `Hello, ${
     this.name}`;
    }
}
  • 构造函数与属性初始化

ArkTS 和 TypeScript 一样,支持在构造函数中初始化类的属性。

class Worker {
   
    name: string;
    constructor(name: string) {
   
        this.name = name;
    }
}
  • 访问修饰符

ArkTS 与 TypeScript 相同,支持 publicprivateprotected 修饰符。

class Car {
   
    private model: string;
    public year: number;

    constructor(model: string, year: number) {
   
        this.model = model;
        this.year = year;
    }
}
  • 方法的声明与实现

与 TypeScript 类似,ArkTS 支持类方法的声明和实现,方法可以有返回类型和参数类型。

class Calculator {
   
  add(a: number, b: number): number {
   
    return a + b;
  }
}
  • 接口实现

ArkTS 和 TypeScript 一样,支持类实现接口(implements 关键字),但 ArkTS 的接口实现可能会结合 OpenHarmony 的特性,特别是在设备驱动、硬件接口方面的扩展。

interface Movable {
   
  move(): void;
}

class HJ implements Movable {
   
  move(): void {
   
    console.log("脖子右拧~");
  }
}
  • 静态属性与方法

ArkTS 与 TypeScript 一样支持静态属性和方法

class Version {
   
  static version: string = "1.0.0";

  static logVersion(): void {
   
    console.log(this.version);
  }
}
  • 泛型类

与 TypeScript 类似,ArkTS 支持泛型类,可以创建更灵活和可重用的类结构。

class Box<T> {
   
  content: T;
  constructor(content: T) {
   
    this.content = content;
  }
}

空安全

ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。

let x: number = null;    // 编译时错误
let y: string = null;    // 编译时错误
let z: number[] = null;  // 编译时错误

我们可以为空值的变量定义为联合类型T | null。

let x: number | null = null;
x = 1;    // ok
x = null; // ok
if (x != null) {
   
  // 。。。。
}

这部分我们简单了解一下即可。

模块机制

ArkTS 模块系统在设计上与 JavaScript(特别是 ES6+ 的模块系统)非常相似,但由于 ArkTS 的特定应用场景和其面向 OpenHarmony 的优化,模块导入机制存在些许不同。

  • 基础模块导入语法
// 导出模块
export const PI = 3.14;
export function calculateArea(radius: number): number {
   
    return PI * radius * radius;
}

// 导入模块
import {
    PI, calculateArea } from './math';
console.log(calculateArea(5));
  • 默认导出与命名导出
// 默认导出
export default class Person {
   
    constructor(public name: string) {
   }
}
// 导入
import Person from './person';
  • 动态导入
async function hhhhh() {
   
  let n = await import('./say');
  // 。。。。。
}

动态import的业务场景和使用实例我们可以详细参考官方api:动态import

  • 导入HarmonyOS SDK的开放能力
import UIAbility from '@ohos.app.ability.UIAbility';

ohos.app.ability.UIAbility类似于第三方npm包

当然,它的导入方式也是可以很灵活的

方式一:导入Kit下单个模块的接口能力。例如:
import {
    UIAbility } from '@kit.AbilityKit';

方式二:导入Kit下多个模块的接口能力。例如:
import {
    UIAbility, Ability, Context } from '@kit.AbilityKit';

方式三:导入Kit包含的所有模块的接口能力。例如:
import * as module from '@kit.AbilityKit';

从TypeScript快速切换到ArkTS

ArkTS保持了TypeScript基的本语法风格,使得我们可以直接使用TS进行原生应用的开发,但是,为了程序的稳定与安全,官方还是建议我们将将TS代码适配为ArkTS代码。也就是说,如果你的项目使用TS或者你习惯了写TS,最好都了解一些适配规则,方便快速的技术语言切换。

为啥要适配

我们前端的吃饭语言js是一种弱语言,没啥类型限制,因此我们可以非常快速地编写代码。但正因为没啥限制,可能在开发阶段就产生无法预料的bug,比如取值为undefined造成系统崩溃啥的。

也正因如此,TypeScript崛起了,但是它也有一些局限。比如,它不强制要求对变量进行类型标注,导致很多编译时检查无法开展。所以,官方建议适配。

适配规则

这并不是本文要详细学习的内容,大家感兴趣了可以自己看官方api学习。

文档中心

总结

ArkTS 是基于 TypeScript 的扩展语言,因此在基础语法表现方面也和TypeScript几乎是一致的,这让前端几乎没有额外的学习成本。但是要注意的是,ArkTS并不是TypeScript,它内部有一系列针对鸿蒙生态的优化。再者,结合ArkUI,它的写法和TS也还是有一些差异的,但是整体学习起来还是非常轻松的。

相关文章
|
1月前
|
JavaScript 安全 前端开发
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
301 4
|
4天前
|
安全 数据安全/隐私保护 UED
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
### HarmonyOS 5.0(Next)应用开发实战:使用ArkTS构建开箱即用的登录页面 HarmonyOS 5.0(Next)融合了美学与科技,引入“光感美学”设计理念和多设备深度协同功能。本文通过 ArkTS 构建一个简单的登录页面,展示了模块化导入、状态管理、方法封装、声明式UI构建及事件处理等最佳实践。代码实现了一个包含用户名和密码输入框及登录按钮的界面,支持错误提示和页面跳转。
42 14
HarmonyOS 5.0 (Next)应用开发实战:使用ArkTS构建开箱即用的登录页面【HarmonyOS 5.0(Next)】
|
4天前
|
人工智能 自然语言处理 算法
开箱即用的个人主页页面开发实战—基于HarmonyOS 5.0 (Next)和ArkTS的实现【HarmonyOS 5.0(Next)】
本文介绍了基于HarmonyOS 5.0(Next)和ArkTS开发的开箱即用个人主页页面。HarmonyOS 5.0(Next)采用全新“和谐美学”设计理念,通过光元素模拟、多设备无缝流转及小艺助手升级,提升用户体验。文章详细解析了使用ArkTS构建个人主页页面的代码,展示了清晰的布局层次、简洁的事件处理、状态管理和组件化开发等最佳实践。这段代码不仅实现了美观的界面设计,还提供了高效的应用导航和数据传递功能,体现了对用户体验的高度关注。
41 12
开箱即用的个人主页页面开发实战—基于HarmonyOS 5.0 (Next)和ArkTS的实现【HarmonyOS 5.0(Next)】
|
4天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
39 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
4天前
|
人工智能 安全 数据安全/隐私保护
HarmonyOS应用开发实战:基于ArkTS的开箱即用登录页面实现【样式方式实现①】【HarmonyOS 5.0(Next)】
本文介绍了基于HarmonyOS 5.0(Next)和ArkTS实现的开箱即用登录页面。HarmonyOS 5.0是华为于2024年10月22日发布的第三代移动操作系统,具备原生智能、互联、安全及流畅特性。文章详细解析了使用ArkTS开发登录页面的代码,涵盖组件定义、界面布局、事件处理、样式设置及异步操作等内容,展示了清晰的组件结构、响应式设计与模块化编程的优势。通过这段代码,开发者可以快速上手并构建高效、美观的应用界面。
|
16天前
|
存储 JSON 开发工具
三、HarmonyOS NEXT应用开发:ArkTS工程目录结构(Stage模型)
本文介绍了HarmonyOS NEXT应用开发中ArkTS工程的目录结构(Stage模型),包括AppScope、entry、hvigor、oh_modules等主要目录及其作用。重点解析了entry目录下的src > main > resources目录结构,详细说明了base、限定符目录和rawfile的作用,以及如何引用资源文件。
56 1
|
1月前
|
监控 UED 开发者
鸿蒙next版开发:订阅应用事件(ArkTS)
在HarmonyOS 5.0中,ArkTS引入了强大的应用事件订阅机制,允许开发者订阅和处理系统或应用级别的事件,这对于监控应用行为、优化用户体验和进行性能分析至关重要。本文详细介绍了如何在ArkTS中订阅应用事件,并提供了示例代码,包括导入模块、创建观察者、设置事件参数等步骤。通过这些方法,开发者可以更智能地管理和响应应用事件。
105 11
|
1月前
|
UED
鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了强大的相机开发能力,特别是针对折叠屏设备的摄像头适配。本文详细介绍了如何在ArkTS中检测和适配不同折叠状态下的摄像头变更,确保相机应用在不同设备状态下的稳定性和用户体验。通过代码示例展示了具体的实现步骤。
81 8
|
1月前
|
API 内存技术
鸿蒙next版开发:相机开发-拍照(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机功能,特别是拍照功能。本文详细介绍如何在ArkTS中实现拍照功能,包括导入接口、创建会话、配置会话、触发拍照及监听拍照输出流状态,并提供代码示例进行详细解读。通过本文,你将掌握如何在HarmonyOS 5.0中使用ArkTS实现高效的拍照功能。
93 7
|
1月前
|
监控 开发者
鸿蒙next版开发:使用HiDebug获取调试信息(ArkTS)
在HarmonyOS 5.0中,HiDebug是一个强大的应用调试工具,可帮助开发者获取系统的CPU使用率、内存信息等关键性能数据。本文详细介绍了如何在ArkTS中使用HiDebug,并提供了示例代码,帮助开发者进行性能分析和问题诊断。
65 7

热门文章

最新文章