ArkTS基础语法学习指南:TypeScript与ArkTS的关系、基本语法详解

释放双眼,带上耳机,听听看~!
本文介绍了ArkTS基础语法学习指南,包括TypeScript与ArkTS的关系、类型声明、变量声明、常量声明、运算符等内容,适合前端开发者快速入门ArkTS扩展语言。

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

TypeScript与ArkTS的关系

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

ArkTS基础语法学习指南:TypeScript与ArkTS的关系、基本语法详解

简单来说,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也还是有一些差异的,但是整体学习起来还是非常轻松的。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

Iphone Mirroring实现AI打DNF手游的技术路径与训练模型

2024-10-19 17:27:00

AI教程

VMware Workstation介绍Linux操作系统的安装步骤

2024-10-19 17:49:00

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索