ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,需要先了解一下TS语言的基础知识。
一、基础类型
1. 数字类型-number
双精度 64 位浮点值。它可以用来表示整数和分数
| let decLiteral: number = 6; |
2. 字符串类型-string
一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。
| let name: string = "Runoob"; |
| let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`; |
3. 布尔类型-boolean
表示逻辑值:true 和 false。
| let flag: boolean = true; |
4. 枚举-enum
枚举类型用于定义数值集合。
| enum Color {Red, Green, Blue}; |
| let c: Color = Color.Blue; |
5. 数组
| let arr: number[] = [1, 2]; |
| let arr: Array<number> = [1, 2]; |
6. 元组
元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。
| let x: [string, number]; |
| x = ['Runoob', 1]; |
7. 特殊类型-any、null、undefined
Any
任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型,变量的值会动态改变时使用
| let x: any = 1; |
| x = 'I am who I am'; |
| x = false; |
null
null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是 object。
undefined
undefined 是一个没有设置值的变量。typeof 一个没有值的变量会返回 undefined。
| var person; |
| var person = undefined; |
undefined 和 null 的区别
null 和 undefined 的值相等,但类型不等:
| typeof undefined |
| typeof null |
| null === undefined |
| null == undefined |
二、变量
var [变量名] : [类型] = 值;
| var uname = "Runoob"; |
| let password = "123456"; |
注意:Swift 中,var 为变量,let 为常量;而 JavaScript 中,var 为函数作用域变量,let 为块作用域变量,const 为常量。
三、常量
| const PI = 3.141592653589793; |
四、流程控制语句
| |
| var num:number = 2 |
| if(num > 0) { |
| console.log(num+" 是正数") |
| } else if(num < 0) { |
| console.log(num+" 是负数") |
| } else { |
| console.log(num+" 不是正数也不是负数") |
| } |
| |
| |
| var grade:string = "A"; |
| switch(grade) { |
| case "A": { |
| console.log("优"); |
| break; |
| } |
| case "B": { |
| console.log("良"); |
| break; |
| } |
| case "C": { |
| console.log("及格"); |
| break; |
| } |
| case "D": { |
| console.log("不及格"); |
| break; |
| } |
| default: { |
| console.log("非法输入"); |
| break; |
| } |
| } |
| |
| |
| var num:number = 5; |
| var i:number; |
| var factorial = 1; |
| for(i = num;i>=1;i--) { |
| factorial *= i; |
| } |
| |
| |
| var j:any; |
| var n:any = "a b c"; |
| for(j in n) { |
| console.log(n[j]); |
| } |
| |
| |
| let someArray = [1, "string", false]; |
| for (let entry of someArray) { |
| console.log(entry); |
| } |
| |
| |
| let list = [4, 5, 6]; |
| list.forEach((val, idx, array) => { |
| |
| |
| |
| }); |
| |
| |
| let list = [4, 5, 6]; |
| list.every((val, idx, array) => { |
| |
| |
| |
| return true; |
| |
| }); |
| |
| |
| var num:number = 5; |
| var factorial:number = 1; |
| while(num >=1) { |
| factorial = factorial * num; |
| num--; |
| } |
| |
| |
| var n:number = 10; |
| do { |
| console.log(n); |
| n--; |
| } while(n>=0); |
在循环语句中支持break
和continue
关键字,跳出或继续循环
五、函数
语法格式:
| |
| function function_name(){} |
| |
| function function_name(): T{} |
| |
| function function_name(param1[:type],param2[:type] = default_value) {} |
| |
| function buildName(firstName: string, ...restOfName: string[]) { |
| return firstName + " " + restOfName.join(" "); |
| } |
| |
| var res = function( [arguments] ) { ... } |
| |
| var res = new Function ([arg1[, arg2[, ...argN]],] functionBody) |
| |
| ( [param1, param2,…param n] )=>statement; |
六、类( Class )
语法格式:
普通
示例:
| class Car { |
| |
| engine:string; |
| |
| |
| constructor(engine:string) { |
| this.engine = engine |
| } |
| |
| |
| disp():void { |
| console.log("发动机为 : "+this.engine) |
| } |
| } |
| |
| var obj = new Car("Engine 1") |
| obj.field_name |
| obj.function_name() |
继承
使用extends作为关键字:
| class Shape { |
| Area:number |
| |
| constructor(a:number) { |
| this.Area = a |
| } |
| |
| test() {} |
| } |
| |
| class Circle extends Shape { |
| disp():void { |
| console.log("圆的面积: "+this.Area) |
| } |
| |
| test() { |
| super.test() |
| } |
| } |
| |
| var obj = new Circle(223); |
| obj.disp(); |
| obj.test; |
七、接口
语法定义:
| interface interface_name { |
| } |
普通
| interface IPerson { |
| firstName:string, |
| lastName:string, |
| sayHi: ()=>string |
| } |
| |
| var customer:IPerson = { |
| firstName:"Tom", |
| lastName:"Hanks", |
| sayHi: ():string =>{return "Hi there"} |
| } |
接口继承
接口可以通过关键字extends来继承其他接口以扩展自己。
单继承
| interface Person { |
| age:number |
| } |
| |
| interface Musician extends Person { |
| instrument:string |
| } |
| |
| var drummer = <Musician>{}; |
| drummer.age = 27 |
| drummer.instrument = "Drums" |
多继承
| interface IParent1 { |
| v1:number |
| } |
| |
| interface IParent2 { |
| v2:number |
| } |
| |
| interface Child extends IParent1, IParent2 { } |
| var Iobj:Child = { v1:12, v2:23} |
八、导入( Import )
通过关键字import导入其他文件
| import someInterfaceRef = require("./SomeInterface"); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2022-10-25 Flutter(八):Flutter路由管理(Router)