ArkTS是HarmonyOS優選的主力應用開發語言。ArkTS圍繞應用開發在TypeScript(簡稱TS)生態基礎上做了進一步擴展,繼承了TS的所有特性,是TS的超集。因此,在學習ArkTS語言之前,需要先瞭解一下TS語言的基礎知識。 一、基礎類型 1. 數字類型-number 雙精度 64 位 ...
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。
var person = null; // 值為 null(空), 但類型為object
undefined
undefined 是一個沒有設置值的變數。typeof 一個沒有值的變數會返回 undefined。
var person; // 值為 undefined, 類型是undefined
var person = undefined; // 值為 undefined, 類型為 undefined
undefined 和 null 的區別
null 和 undefined 的值相等,但類型不等:
typeof undefined // undefined
typeof null // object
null === undefined // false (類型不等)
null == undefined // true (值相等)
二、變數
var [變數名] : [類型] = 值;
var uname = "Runoob";
let password = "123456";
註意:Swift 中,var 為變數,let 為常量;而 JavaScript 中,var 為函數作用域變數,let 為塊作用域變數,const 為常量。
三、常量
const PI = 3.141592653589793;
四、流程式控制制語句
// if
var num:number = 2
if(num > 0) {
console.log(num+" 是正數")
} else if(num < 0) {
console.log(num+" 是負數")
} else {
console.log(num+" 不是正數也不是負數")
}
// switch
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;
}
}
// for
var num:number = 5;
var i:number;
var factorial = 1;
for(i = num;i>=1;i--) {
factorial *= i;
}
// for in
var j:any;
var n:any = "a b c";
for(j in n) {
console.log(n[j]);
}
// for of
let someArray = [1, "string", false];
for (let entry of someArray) {
console.log(entry); // 1, "string", false
}
// forEach
let list = [4, 5, 6];
list.forEach((val, idx, array) => {
// val: 當前值
// idx:當前index
// array: Array
});
// every
let list = [4, 5, 6];
list.every((val, idx, array) => {
// val: 當前值
// idx:當前index
// array: Array
return true; // Continues
// Return false will quit the iteration
});
// while
var num:number = 5;
var factorial:number = 1;
while(num >=1) {
factorial = factorial * num;
num--;
}
// do while
var n:number = 10;
do {
console.log(n);
n--;
} while(n>=0);
在迴圈語句中支持break
和continue
關鍵字,跳出或繼續迴圈
五、函數
語法格式:
// 預設
function function_name(){}
// 帶返回值,:後的T為返回值類型
function function_name(): T{}
// 帶參函數,支持預設值
function function_name(param1[:type],param2[:type] = default_value) {}
// 帶剩餘參數,函數的最後一個命名參數 restOfName 以 ... 為首碼,它將成為一個由剩餘參數組成的數組
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ");
}
// 匿名函數
var res = function( [arguments] ) { ... }
// 構造函數
var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
// Lambda 函數
( [param1, param2,…param n] )=>statement;
六、類( Class )
語法格式:
class class_name {
// 類作用域
}
普通
示例:
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");