二、ArkTS语法学习

news2024/12/26 10:34:29
上一篇我们学习了Harmony​​​​​​开发入门,接下来我们简单学习一下ArkTS

一、ArkTS起源

在TS基础上扩展了申明式UI和状态管理等相应的能力

二、TS语法基础

1、类型

any

任意类型(动态类型)

let a: any = 5; a = "str"

number

let num: number = 5; num = 10.0

包装类:Number

string

let str: string = 'name', str = "age", str = `age ${a}`

包装类:String

boolean

let b: boolean = false

包装类:Boolean

数组

let: arr1: number[] = [1,2]; let arr2: Array<number> = [3,4]/new Array(3,4)

包装类:Array

元组

已知元素数量和类型,类型可以不相同,对应位置的类型需要相同

let x: [string, number]; x = ['str', 1]

enum

enum Color{Red,Green,Blue}; let c:Color=Color.Blue;

void

用于标识方法返回值的类型,表示该方法没有返回值。

function hello():void{

alert("Hello");

}

null

表示对象值缺失

let num: number = null

undefined

用于初始化变量为一个未定义的值

let num: number

console.log(num) ----> 输出undefined

联合类型

let t: Type1|Type2|Type3...

类型别名

type float = number; let time: float = 10; // time就是number类型

type userObj = {name:string} // 对象

type numOrObj = float | userOjb // 联合类型

2、变量申明

let/var[变量名]:[类型]=值;      
let/var[变量名] = 值  // 类型推断
let/var[变量名]:[类型]   // 不赋值,默认是undefined

let与var的区别:

1、let 不能重复声明,但var可以; // var a = 1; var a = 2;

2、let会产生块级作用域,且只在自己的作用域内生效,但var不受限制

{ let a = 1; var b = 2;} console.log(a); //报错 console.log(b);//2

3、let不存在变量提升

console.log(a); //undefined var a = 1; console.log(b); //报错 let b = 1;

3、条件语句if

if(boolean_expression){
    # 在布尔表达式 boolean_expression 为 true 执行
}

当boolean_expression 结果不是布尔值时会自动转换为boolean

如:if(0)、 if("") 、if('') 、if(null)、 if(undefined) 均为等价if(false)

4、函数

function function_name(param1 [:datatype], ...) [:return_type] {  // 语句  return value; };
function function_name(param1? :datatype){} // 可选参数
function function_name(param1 :datatype = default_value){} // 默认参数
function function_name(...param1 :datatype[]){} // 剩余参数,不确定参数个数,数组接受
匿名函数:var res = function( [arguments] ) { ... }
构造函数申明:var res = new Function ([arg1[, arg2[, ...argN]],] functionBody) // 例如 var myFunction = new Function("a", "b", "return a * b");
Lambda函数(箭头函数) ([arguments] ) => statement;

注意:普通函数中的this指向调用该函数的对象,但是箭头函数中的this指向定义它时,它所处的对象

5、接口

interface interface_name {
   [变量]:[类型]  
    ...
}
实现: var res: interface_name = {...}
继承:interface interface_name extends inteface_name1, inteface_name2 { }

6、类

class class_name { 
    static [变量]:[类型]; // 静态变量
    static static_fun_name()[:return_type] {} // 静态变量

    [变量]:[类型]; // 字段 
    constructor([arguments]) {} // 构造函数 
    function_name()[:return_type] { } // 方法 
}
实例化:var object_name = new class_name([ arguments ])
继承:class child_class_name extends parent_class_name // 单继承,支持多重继承(A 继承 B,B 继承 C)
实现接口:class child_class_name implements interface_name1, interface_name2, ...
instanceof运算符: 用于判断对象是否是指定的类型, // person_obj instanceof Person 返回true

7、对象

类实例化:var object_name = new class_name([ arguments ])
对象字面量var object_name = { [key]: [value] // 标量、函数、数组、对象等 }
object_name.key = value // 赋值更新

8、泛型

泛型函数: function combine<T>(arg: T):T{ 
        return arg;
    }
泛型接口:interface interface_name<T, U> { first: T; second: U; }
泛型类:class class_name<T> {
    private value: T;
    constructor(value: T) { this.value = value; }
}
泛型默认值:function defaultValue<T=string>(arg: T):T {return arg;}

9、命名空间

解决重名问题、聚合相关联的类和接口
namespace SomeNameSpaceName { 
   export interface ISomeInterfaceName {      }  
   export class SomeClassName {      }  
}
使用:SomeNameSpaceName.SomeClassName;

10、模块

模块是一个独立的文件或代码块,它封装了一组相关的数据和函数,并提供了对外的接口,暴露给外部的接口,必须使用exprot命令声明;如果一个文件要使用模块的接口,需要用import命令导入

导出

导入

单独导出

export let/var/const xxx1 = v1

export function fn() {}

import { xxx1, fn } from 'xxxfile'

正常导出

export {xxx1, xxx2, ... }

import { xxx1, xxx2, ... } from 'xxxfile'

import * as xx from 'xxxfile' // xx.xxx1

默认导出

(每个模块有且只有一个)

export default xxxn

import xxxn from 'xxxfile'

重命名导出/导入

export {xxx1 as 1xxx, xxx2, ... }

import { 1xxx, xxx2 as 2xxx, ... } from 'xxxfile'

复合导入

export {xxx1, xxx2, ... }

export default xxxn

import xxxn, { xxx1, xxx2, ... } from 'xxxfile'

导入导出:export命令和import命令结合在一起写成一行,变量实质没有被导入当前模块,相当于对外转发接口,当前模块无法直接使用其导入变量

默认导入导出

export { default } from "xxxfile"

整体导入导出

export * from "xxxfile"

按需导入导出

export { age, name, sex } from "xxxfile"

改名导入导出

export { name as newName } from "xxxfile"

具名改默认导入导出

export { name as default } from "xxxfile"

默认改具名导入导出

export { default as name } from "xxxfile"

11、声明文件

直接引用的三方 JavaScript 库,是无法使用TypeScript 诸如类型检查等特性功能,将库里的函数方法体去掉只保留导出类型声明,产生一个描述 JavaScript 库和模块信息的声明文件,声明文件以.d.ts为后缀

声明文件语法格式:declare module Module_Name{   }

三、常见的TypeScript语法规则到ArkTS的适配

1、ArkTS不支持var,请使用let声明变量

2、ArkTS不支持any和unknown类型。显式指定具体类型

3、禁止在运行时变更对象布局

class Point {
  public x: number = 0
  public y: number = 0
  constructor(x: number, y: number) {
    this.x = x;
    this.y = y;
  }
}
  • 向对象中添加新的属性或方法。
let p2 = new Point(2.0, 2.0);
p2.z = 'Label'; 
  • 从对象中删除已有的属性或方法。
let p1 = new Point(1.0, 1.0);
delete p1.x; 
  • 将任意类型的值赋值给对象属性。
let p4 = new Point(4.0, 4.0);
p4.x = 'Hello!';

4、对象的属性名不能为数字或字符串

var x = { 'name': 'x', 2: '3' };

5、不支持使用#符号开头声明的私有字段。改用private关键字

class C {
  // #foo: number = 42
  private foo: number = 42
}

6、类型、命名空间的命名必须唯一

let X: string
type X = number[] // 类型的别名与变量同名

7、ArkTS不允许类中有多个静态代码块,如果存在多个静态代码块语句,请合并到一个静态块中

class C {
  static s: string
  static {
    C.s = 'aa'
  }
}

8、使用点操作符访问字段,例如(obj.field),不支持索引访问(obj[field])

9、需要显式标注对象字面量的类型

错误:let o1 = {n: 42, s: 'foo'}; // 需要显示申明n和s的类型
正确-先声明类型:class C1 {
  n: number = 0
  s: string = ''
}
let o1: C1 = {n: 42, s: 'foo'};

10、ArkTS不支持使用对象字面量声明类型,可以使用类或者接口声明类型。

错误:let o: {x: number} = { x: 2 }
正确-先声明类型:class O { x: number = 0}
let o: O = {x: 2};

11、ArkTS不支持函数表达式,使用箭头函数。

错误:let f = function (s: string) { console.log(s)}
正确:let f = (s: string) => { console.log(s)}

12、在ArkTS中,as关键字是类型转换的唯一语法

let c3 = square obj as Shape;

13、一元运算符+、-和~仅适用于数值类型

14、不支持delete运算符

15、ArkTS不支持解构赋值。可使用其他替代方法,例如,使用临时变量。

let one, two; 
[one, two] = [1, 2];

16、ArkTS不支持解构变量声明

class Point {
  x: number = 0.0
  y: number = 0.0
}
错误:let {x, y} = new Point();
正确:let x = zp.x;  let y = zp.y;

17、不支持在catch语句标注类型

try {
  // ...
} catch (a) { // a不标注类型
  // 处理异常
}

18、限制省略函数返回类型标注(尽量标注函数返回值类型)

19、ArkTS不支持在函数内声明函数,可以用lambda函数

20、不支持在函数和类的静态方法中使用this

21、接口不能继承具有相同方法的两个接口

22、不支持import default as ...

不支持:import { default as d } from 'mod'
import d from 'mod'

23、不允许通过注释关闭类型检查,不支持使用@ts-ignore和@ts-nocheck。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】常用USB转串口芯片CH340驱动自动静默安装方法

微信关注公众号 “DLGG创客DIY” 设为“星标”&#xff0c;重磅干货&#xff0c;第一时间送达。 前言 CH340是沁恒(南京沁恒微电子股份有限公司)一款非常有名USB转串口芯片&#xff0c;很多廉价的开发板上都使用这款USB转串口芯片&#xff0c;我觉得主要原因是因为它成本最低&a…

[论文阅读]Adversarial Autoencoders(aae)和代码

In this paper, we propose the “adversarial autoencoder” (AAE), which is a probabilistic autoencoder that uses the recently proposed generative adversarial networks (GAN) to perform variational inference by matching the aggregated posterior of the hidden …

基于K8S构建Jenkins持续集成平台

文章目录 安装和配置NFSNFS简介NFS安装 在Kubernetes安装Jenkins-Master创建NFS client provisioner安装Jenkins-Master Jenkins与Kubernetes整合实现Jenkins与Kubernetes整合构建Jenkins-Slave自定义镜像 JenkinsKubernetesDocker完成微服务持续集成拉取代码&#xff0c;构建镜…

LLM2Vec介绍和将Llama 3转换为嵌入模型代码示例

嵌入模型是大型语言模型检索增强生成(RAG)的关键组成部分。它们对知识库和用户编写的查询进行编码。 使用与LLM相同领域的训练或微调的嵌入模型可以显著改进RAG系统。然而&#xff0c;寻找或训练这样的嵌入模型往往是一项困难的任务&#xff0c;因为领域内的数据通常是稀缺的。…

Docker目录迁移

我们在生产环境中安装Docker时&#xff0c;默认的安装目录是 /var/lib/docker&#xff0c;而通常情况下&#xff0c;规划给系统盘的目录一般为50G&#xff0c;该目录是比较小的&#xff0c;一旦容器过多或容器日志过多&#xff0c;就可能出现Docker无法运行的情况&#xff0c;所…

QT+串口调试助手+扩展版

前言&#xff1a;此文章是这篇文章的拓展 QT串口调试助手基本版-CSDN博客&#xff0c;如果需要独立完成串口调试助手直接看基本版文章即可&#xff0c;如果需要完成串口调试助手的其他功能&#xff0c;参考拓展版。 一、更新QT串口调试助手UI界面 1、ui串口设置界面 2、ui串口…

树莓派4-使用systemctl设置开机自启oled播放服务ip地址与logo

一、目标&#xff1a; 开机自启oled显示服务ip与端口&#xff0c;并播放logo 二、过程&#xff1a; 1、出现luma库不存在问题&#xff0c;修改.service文件&#xff0c;增加用户与用户组。在本地测试过程中可以使用python script.py执行python脚本&#xff0c;所以将.servic…

机器学习周记(第三十七周:语义分割)2024.4.29~2024.5.5

目录 摘要 ABSTRACT 1 DeepLabV3 1.1 空间金字塔池化&#xff08;ASPP&#xff09; 1.2 解码器&#xff08;Decoder&#xff09; 1.3 Xception 2 相关代码 摘要 DeepLabV3 是由Google Brain团队开发的深度学习模型&#xff0c;专注于语义分割任务。它采用深度卷积神经网…

【c++算法篇】双指针(上)

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;算法笔记仓 朋友们大家好啊&#xff0c;本篇文章我们来到算法的双指针部分 目录 1.移动零2.复写零3.快乐数4.盛水最多的容器 1.移动零 题目链接&#xff1a;283.移动零 题目描述&#xff1a; 算法…

深究muduo网络库的Buffer类!!!

最近在学习了muduo库的Buffer类&#xff0c;因为这个编程思想&#xff0c;今后在各个需要缓冲区的项目编程中都可以用到&#xff0c;所以今天来总结一下&#xff01; Buffer的数据结构 muduo的Buffer的定义如下&#xff0c;其内部是 一个 std::vector&#xff0c;且还存在两个…

9.3.k8s的控制器资源(deployment部署控制器)

目录 一、deployment部署控制器概念 二、deployment资源的清单编写 三、小结 功能 使用场景 原理 四、deployment实现升级和回滚 1.编辑deployment资源清单&#xff08;v1版本&#xff09; 2.创建service资源用于访问 ​编辑 3.修改deploy清单中pod镜像版本为V2 4…

Vmware虚拟机瘦身及Samba服务不可用问题解决

虚拟机磁盘空间膨胀是一个令人头疼的问题&#xff0c;特别是对许多搞开发的小伙伴。无论是做后台服务、嵌入式还是Android开发&#xff0c;都面临着这个难题。首先&#xff0c;操作系统本身就已占用不少空间&#xff0c;更新安装包&#xff0c;再下载一些开源软件&#xff0c;剩…

【管理篇】确定自己的管理风格

目录标题 常见的四类领导力风格不同领导力风格适应的场景领导力风格总结 常见的四类领导力风格 四类领导力风格&#xff0c;简单概况如下&#xff1a; 指令式管理&#xff1a;重事不重人&#xff0c;关注目标和结果&#xff0c;喜欢发号施令但不亲力亲为。支持式管理&#xf…

Windows编译SeetaFace6

1. 概述 SeetaFace6包含人脸识别的基本能力&#xff1a;人脸检测、关键点定位、人脸识别&#xff0c;同时增加了活体检测、质量评估、年龄性别估计&#xff0c;并且顺应实际应用需求&#xff0c;开放口罩检测以及口罩佩戴场景下的人脸识别模型。 发布时间 人脸识别算法版本 G…

易语言IDE界面美化支持库

易语言IDE界面美化支持库 下载下来可以看到&#xff0c;是一个压缩包。 那么&#xff0c;怎么安装到易语言中呢&#xff1f; 解压之后&#xff0c;得到这两个文件。 直接将clr和lib丢到易语言安装目录中&#xff0c;这样子就安装完成了。 打开易语言&#xff0c;在支持库配置…

swift微调多模态大语言模型

微调训练数据集指定方式的问题请教 Issue #813 modelscope/swift GitHubQwen1.5微调训练脚本中&#xff0c;我用到了--dataset new_data.jsonl 这个选项&#xff0c; 可以训练成功&#xff0c;但我看文档有提到--custom_train_dataset_path这个选项&#xff0c;这两个有什么…

C 认识指针

目录 一、取地址操作符&#xff08;&&#xff09; 二、解引用操作符&#xff08;*&#xff09; 三、指针变量 1、 指针变量的大小 2、 指针变量类型的意义 2.1 指针的解引用 2.2 指针 - 整数 2.3 调试解决疑惑 认识指针&#xff0c;指针比较害羞内敛&#xff0c;我们…

局域网唤醒平台:UpSnap

简介&#xff1a;UpSnap是一个简单的唤醒局域网网络应用程序。UpSnap为每个用户、每个设备提供了唯一的访问权限。虽然管理员拥有所有权限&#xff0c;但他们可以为用户分配特定的权限&#xff0c;如显示/隐藏设备、访问设备编辑、删除和打开/关闭设备电源。 历史攻略&#xf…

Nginx(参数设置总结)

文章目录 Nginx&#xff08;工作机制&参数设置&#xff09;1.Master&Worker工作机制1.示意图2.解释3.Nginx争抢机制4.accept_mutex解决惊群现象5.多进程结构不用多线程结构的好处6.IO多路复用&#xff0c;实现高并发7.优势 2.参数配置1.work_processes1.基本介绍2.work…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 &#xff08;一&#xff09;智慧旅游的概念 &#xff08;二&#xff09;智慧旅游的特点 三、科技推动旅游业创新发展 &#xff08;一&#xff09;大数据技术的应用 &#xff08;二&#xff09;人工智能技术的应用 &#xff08;…