国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言

這篇具有很好參考價(jià)值的文章主要介紹了【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、背景

HarmonyOS 應(yīng)用的主要開(kāi)發(fā)語(yǔ)言是 ArkTS,它由 TypeScript(簡(jiǎn)稱TS)擴(kuò)展而來(lái),在繼承TypeScript語(yǔ)法的基礎(chǔ)上進(jìn)行了一系列優(yōu)化,使開(kāi)發(fā)者能夠以更簡(jiǎn)潔、更自然的方式開(kāi)發(fā)應(yīng)用。值得注意的是,TypeScript 本身也是由另一門語(yǔ)言 JavaScript 擴(kuò)展而來(lái)。因此三者的關(guān)系如下圖所示

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

二、TypeScript

2.1、運(yùn)行環(huán)境

2.1.1、線上Playground

TypeScript提供了一個(gè)線上的 Playground 供練習(xí)使用,地址為TypeScript: 演練場(chǎng) - 一個(gè)用于 TypeScript 和 JavaScript 的在線編輯器。

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

2.1.2、本地運(yùn)行環(huán)境?

2.1.2.1、采用的是VSCode 編輯器
2.1.2.2、前提條件

1、安裝插件:Code Runner:它提供了簡(jiǎn)便的代碼執(zhí)行功能,支持多種編程語(yǔ)言,使開(kāi)發(fā)者能夠快速運(yùn)行和調(diào)試代碼片段。

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言


2、安裝Node.js并配置Path環(huán)境變量

說(shuō)明:我已經(jīng)安裝了Node.js,便不重復(fù)安裝了

為了方便在終端執(zhí)行Node.js相關(guān)的命令,我們需要將Node.js的安裝目錄加入到Path環(huán)境變量下

步驟1:首先在DevEco Studio的設(shè)置界面查看Node.js的安裝目錄

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

步驟2:然后打開(kāi)環(huán)境變量配置面板,按下?Win+R?,喚起運(yùn)行窗口,之后運(yùn)行命令?sysdm.cpl?

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

步驟3:點(diǎn)擊高級(jí)選項(xiàng)卡,并點(diǎn)擊環(huán)境變量

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

步驟4:在系統(tǒng)變量中選中?Path?,并點(diǎn)擊編輯

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

步驟5:點(diǎn)擊新建,并填入Node.js的安裝目錄,完成后點(diǎn)擊確定

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言


3、安裝ts-node

這是一個(gè) TypeScript 的運(yùn)行環(huán)境,它允許我們直接運(yùn)行 TypeScript 代碼。ts-node的安裝和運(yùn)行依賴于Node.js環(huán)境,已經(jīng)安裝了Node.js

npm install -g ts-node

在終端中輸入node -v 和ts-node -v后出現(xiàn)各自版本,說(shuō)明這兩個(gè)已經(jīng)安裝成功了,如下:

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

注:完成后需要重新啟動(dòng)VSCode,另其重新加載環(huán)境變量和相關(guān)依賴。

2.1.2.3、編寫程序并運(yùn)行

首先在合適的位置創(chuàng)建一個(gè)工程目錄,例如C:\Users\......\hello-ts,然后使用VSCode打開(kāi)目錄,創(chuàng)建ts文件,并編寫Typescript代碼運(yùn)行

問(wèn)題:運(yùn)行ts時(shí)出現(xiàn)以下錯(cuò)誤,百度后發(fā)現(xiàn)是由于 ts-node 版本升級(jí)導(dǎo)致的兼容性問(wèn)題

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

解決:需要在項(xiàng)目中安裝??@types/node?

npm install --save-dev @types/node

效果:?安裝??@types/node?后,再運(yùn)行就能夠正常打印日志了

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

2.2、聲明

2.2.1、變量聲明

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

2.2.2、常量聲明

?let用于聲明變量,而const用于聲明常量,兩者的區(qū)別是變量在賦值后可以修改,而常量在賦值后便不能再修改。

const b:number = 200;

2.2.3、類型推斷?

如果一個(gè)變量或常量的聲明包含了初始值,TS 便可以根據(jù)初始值進(jìn)行類型推斷,此時(shí)我們就可以不顯式指定其類型,例如

let c = 60;
console.log(typeof c); //number

2.3、常用數(shù)據(jù)類型?

2.3.1、number

number表示數(shù)字,包括整數(shù)和浮點(diǎn)數(shù),例如: 100、-332.5、-3.9

let a :number = 100
let b :number = -33
let c :number = 2.5
let d :number = -3.9

2.3.2、string?

string表示字符串,例如: 你好hello

let a:string = '你好'
let b:string = 'hello'

?2.3.3、boolean

boolean表示布爾值,可選值為:true、false

let isOpen:boolean = true
let isDone:boolean = false

?2.3.4、數(shù)組

數(shù)組類型定義由兩部分組成,元素類型[],例如number[]表示數(shù)字?jǐn)?shù)組,string[]表示字符串?dāng)?shù)組,數(shù)組類型的變量可由數(shù)組字面量——[item1,item2,item3]進(jìn)行初始化。

let a: number[] = []
let b: string[] = ['你好', 'hello']

2.3.5、對(duì)象?

在TS中,對(duì)象(object)是一種一系列由屬性名稱屬性值組成的數(shù)據(jù)結(jié)構(gòu),例如姓名:'張三', 年齡:10, 性別:'男'。對(duì)象類型的聲明需要包含所有屬性的名稱類型,例如{name: string, age: number, gender: string},對(duì)象類型的變量可以通過(guò)對(duì)象字面量——{name:'張三', age:10, gender:'男'}進(jìn)行初始化。

let person: {name:string, age:number, gender:string} = {name:'張三', age:10, gender:'男'};

2.4、函數(shù)?

2.4.1、函數(shù)聲明語(yǔ)法

聲明函數(shù)的基礎(chǔ)語(yǔ)法如下

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

2.4.2、參數(shù)

2.4.2.1、特殊語(yǔ)法

①可選參數(shù)

可選參數(shù)通過(guò)參數(shù)名后的?進(jìn)行標(biāo)識(shí),如以下案例中的gender?參數(shù)。

function getPersonInfo(name: string, age: number, gender?: string): string {
    if (gender === undefined) {
        gender = '未知'
    }
    return `name:${name},age:${age},gender:${gender}`;
}

let p1 = getPersonInfo('zhagnsan', 10, '男')
let p2 = getPersonInfo('lisi', 15);
console.log(p1);
console.log(p2);

注:調(diào)用函數(shù)時(shí),未傳遞可選參數(shù),則該參數(shù)的值為undefined。

②默認(rèn)參數(shù)

可在函數(shù)的參數(shù)列表為參數(shù)指定默認(rèn)值,如以下案例中的gender: string='未知'參數(shù)。

function getPersonInfo(name: string, age: number, gender: string='未知'): string {
    return `name:${name},age:${age},gender:${gender}`;
}

let p1 = getPersonInfo('zhagnsan', 10, '男')
let p2 = getPersonInfo('lisi', 15);
console.log(p1);
console.log(p2);
2.4.2.2、 特殊類型

①聯(lián)合類型

一個(gè)函數(shù)可能用于處理不同類型的值,這種情況可以使用聯(lián)合類型,例如以下案例中的message: number | string

function printNumberOrString(message: number | string) {
  console.log(message)
}

printNumberOrString('a')
printNumberOrString(1)

②任意類型

?若函數(shù)需要處理任意類型的值,則可以使用any類型,例如以下案例中的message: any

function print(message:any) {
  console.log(message)
}

print('a')
print(1)
print(true)

2.4.3、 返回值

2.4.3.1、特殊類型

若函數(shù)沒(méi)有返回值,則可以使用void作為返回值類型,其含義為空。

function test(): void {
    console.log('hello');
}
2.4.3.2、類型推斷

函數(shù)的返回值類型可根據(jù)函數(shù)內(nèi)容推斷出來(lái),因此可以省略不寫。

function test() {
    console.log('hello');
}

function sum(a: number, b: number) {
    return a + b;
}

2.4.4、函數(shù)聲明特殊語(yǔ)法

①匿名函數(shù)

匿名函數(shù)的語(yǔ)法結(jié)構(gòu)簡(jiǎn)潔,特別適用于簡(jiǎn)單且僅需一次性使用的場(chǎng)景。

let numbers: number[] = [1, 2, 3, 4, 5]
numbers.forEach(function (number) {
    console.log(number);
})

注意:匿名函數(shù)能夠根據(jù)上下文推斷出參數(shù)類型,因此參數(shù)類型可以省略。

②箭頭函數(shù)

匿名函數(shù)的語(yǔ)法還可以進(jìn)一步的簡(jiǎn)化,只保留參數(shù)列表和函數(shù)體兩個(gè)核心部分,兩者用=>符號(hào)連接。

let numbers: number[] = [1, 2, 3, 4, 5]
numbers.forEach((num) => { console.log(num) })

2.5、類

2.5.1、類介紹

類(class)是面向?qū)ο缶幊陶Z(yǔ)言中的一個(gè)重要概念。

面向?qū)ο缶幊蹋∣bject-Oriented Programming,簡(jiǎn)稱OOP)是一種編程范式,其核心理念在于將程序中的數(shù)據(jù)與操作數(shù)據(jù)的方法有機(jī)地組織成對(duì)象,從而使程序結(jié)構(gòu)更加模塊化和易于理解。通過(guò)對(duì)象之間的協(xié)同合作,實(shí)現(xiàn)更為復(fù)雜的程序功能。

類(class)是對(duì)象的藍(lán)圖或模板,它定義了對(duì)象的屬性(數(shù)據(jù))和行為(方法)。通過(guò)類可以創(chuàng)建多個(gè)具有相似結(jié)構(gòu)和行為的對(duì)象。例如定義一個(gè) Person類,其對(duì)象可以有張三、李四等等。

2.5.2、語(yǔ)法說(shuō)明

2.5.2.1、類的定義

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言

class Person {
    id: number;
    name: string;
    age: number = 18;

    constructor(id: number, name: string) {
        this.id = id;
        this.name = name;
    }

    introduce(): string {
        return `hello,I am ${this.name},and I am ${this.age} years old`
    }
}
2.5.2.2、對(duì)象創(chuàng)建

①語(yǔ)法

創(chuàng)建對(duì)象的關(guān)鍵字為new,具體語(yǔ)法如下

let person = new Person(1,'zhangsan');

②對(duì)象屬性的訪問(wèn)

console.log(person.name); //讀

person.name = 'lisi'; //寫

console.log(person.name);

③對(duì)象方法的調(diào)用

對(duì)象創(chuàng)建后,便可通過(guò)對(duì)象調(diào)用類中聲明的方法,如下

let intro = person.introduce();
console.log(intro);
2.5.2.3、靜態(tài)成員

Typescript 中的類中可以包含靜態(tài)成員(靜態(tài)屬性和靜態(tài)方法),靜態(tài)成員隸屬于類本身,而不屬于某個(gè)對(duì)象實(shí)例。靜態(tài)成員通用用于定義一些常量,或者工具方法。

①聲明靜態(tài)成員

定義靜態(tài)成員需要使用static關(guān)鍵字。

class Constants{
    static count:number=1;
}

class Utils{
    static toLowerCase(str:string){
        return str.toLowerCase();
    }
}

console.log(Constants.count);
console.log(Utils.toLowerCase('Hello World'));

②使用靜態(tài)成員

靜態(tài)成員無(wú)需通過(guò)對(duì)象實(shí)例訪問(wèn),直接通過(guò)類本身訪問(wèn)即可。

console.log(Constants.count);
console.log(Utils.toLowerCase('Hello World'));

2.5.3、繼承

繼承是面向?qū)ο缶幊讨械闹匾獧C(jī)制,允許一個(gè)類(子類或派生類)繼承另一個(gè)類(父類或基類)的屬性和方法。子類可以直接使用父類的特性,并根據(jù)需要添加新的特性或覆蓋現(xiàn)有的特性。這種機(jī)制賦予面向?qū)ο蟪绦蛄己玫臄U(kuò)展性。

class Student extends Person {
    classNumber: string;
    constructor(id: number, name: string, classNumber: string) {
        super(id, name);
        this.classNumber = classNumber;
    }

    introduce(): string {
        return super.introduce()+`, and I am a student`;
    }
}

let student = new Student(1,'xiaoming','三年二班');
console.log(student.introduce());

注意:

  • 類的繼承需要使用關(guān)鍵字extends
  • 子類構(gòu)造器中需使用super()調(diào)用父類構(gòu)造器對(duì)繼承自父類的屬性進(jìn)行初始化。
  • 在子類中可以使用this關(guān)鍵字訪問(wèn)繼承自父類的屬性和方法。
  • 在子類中可以使用super關(guān)鍵字訪問(wèn)父類定義的方法。

2.5.4、訪問(wèn)修飾符

訪問(wèn)修飾符(Access Modifiers)用于控制類成員(屬性、方法等)的可訪問(wèn)性。TypeScript提供了三種訪問(wèn)修飾符,分別是private、protectedpublic。

class Person {
    private id: number;
    protected name: string;
    public age: number;

    constructor(id: number, name: string, age: number) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

class Student extends Person {
    
}

說(shuō)明:

  • private 修飾的屬性或方法是私有的,只能在聲明它的類中的被訪問(wèn)。
  • protected 修飾的屬性或方法是受保護(hù)的,只能在聲明它的類和其子類中被訪問(wèn)。
  • public 修飾的屬性或方法是公有的,可以在任何地方被訪問(wèn)到,默認(rèn)所有的屬性和方法都是 public 的。

2.6、接口

2.6.1、接口介紹

接口(interface)是面向?qū)ο缶幊讨械牧硪粋€(gè)重要概念。接口通常會(huì)作為一種契約或規(guī)范讓類(class)去遵守,確保類實(shí)現(xiàn)某些特定的行為或功能。

2.6.2、語(yǔ)法說(shuō)明

①接口定義

接口使用interface關(guān)鍵字定義,通常情況下,接口中只會(huì)包含屬性和方法的聲明,而不包含具體的實(shí)現(xiàn)細(xì)節(jié),具體的細(xì)節(jié)由其實(shí)現(xiàn)類完成。

interface Person {
    id: number;
    name: string;
    age: number;
  
    introduce(): void;
}

②接口實(shí)現(xiàn)

接口的實(shí)現(xiàn)需要用到implements關(guān)鍵字,實(shí)現(xiàn)類中,需要包含接口屬性的賦值邏輯,以及接口方法的實(shí)現(xiàn)邏輯。

class Student implements Person {
    id: number;
    name: string;
    age: number;

    constructor(id: number, name: string, age: number) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    introduce(): void {
        console.log('Hello,I am a student');
    }
}

2.6.3、多態(tài)

多態(tài)是面相對(duì)象編程中的一個(gè)重要概念,它可以使同一類型的對(duì)象具有不同的行為。下面我們通過(guò)一個(gè)具體的案例來(lái)體會(huì)多態(tài)這一概念

首先,再創(chuàng)建一個(gè)Person接口的實(shí)現(xiàn)類Teacher,如下

class Teacher implements Person {
    id: number;
    name: string;
    age: number;

    constructor(id: number, name: string, age: number) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    introduce(): void {
        console.log('Hello,I am a teacher');
    }
}

然后分別創(chuàng)建一個(gè)Student對(duì)象和一個(gè)Teacher對(duì)象,注意兩個(gè)對(duì)象的類型均可以設(shè)置Person,如下

let p1: Person = new Student(1, 'zhangsan', 17);
let p2: Person = new Teacher(2, 'lisi', 35);

最后分別調(diào)用p1p2introduce()方法,你會(huì)發(fā)現(xiàn),同樣是Person類型的兩個(gè)對(duì)象,調(diào)用同一個(gè)introduce()方法時(shí),表現(xiàn)出了不同的行為,這就是多態(tài)。

p1.introduce();//Hello,I am a student
p2.introduce();//Hello,I am a teacher

2.6.4、接口的作用

在傳統(tǒng)的面向?qū)ο缶幊痰膱?chǎng)景中,接口主要用于設(shè)計(jì)和組織代碼,使代碼更加容易擴(kuò)展和維護(hù)。

假如現(xiàn)在需要實(shí)現(xiàn)一個(gè)訂單支付系統(tǒng),按照面向?qū)ο缶幊痰牧?xí)慣,首先需要定義一個(gè)訂單類(Order),如下

class Order {
    totalAmount: number;

    constructor(totalAmount: number) {
        this.totalAmount = totalAmount;
    }

    pay() {
        console.log(`AliPay:${this.totalAmount}`);
    }
}

很容易預(yù)想到,這個(gè)系統(tǒng)將來(lái)可能需要支持其他的支付方式,為了方便代碼支持新的支付方式,我們可以對(duì)代碼進(jìn)行如下改造。

首先定義一個(gè)支付策略的接口,接口中聲明一個(gè)pay方法,用來(lái)規(guī)范實(shí)現(xiàn)類必須實(shí)現(xiàn)支付邏輯。

interface PaymentStrategy {
    pay(amount: number): void;
}

然后在訂單類中增加一個(gè)PaymentStrategy的屬性,并且在訂單類中的pay方法中調(diào)用PaymentStrategypay方法,如下

class Order {
    totalAmount: number;
    paymentStrategy: PaymentStrategy;

    constructor(totalAmount: number, paymentStrategy: PaymentStrategy) {
        this.totalAmount = totalAmount;
        this.paymentStrategy = paymentStrategy;
    }

    pay() {
        this.paymentStrategy.pay(this.totalAmount);
    }
}

這樣改造完之后,就可以很容易的在不改變現(xiàn)有代碼的情況下,支持新的支付方式了。

比如現(xiàn)在需要支持AliPay,那我們就可以創(chuàng)建AliPay這個(gè)類(class)并實(shí)現(xiàn)(implement)PaymentStrategy這個(gè)接口,如下

class AliPay implements PaymentStrategy {
    pay(amount: number): void {
        console.log(`AliPay:${amount}`);
    }
}

這樣一來(lái),之后創(chuàng)建的訂單就可以使用AliPay這個(gè)支付方式了。

let order = new Order(1000,new AliPay());
order.pay();

2.6.5、TS中接口的特殊性

TypeScript 中的接口是一個(gè)非常靈活的概念,除了用作類的規(guī)范之外,也常用于直接描述對(duì)象的類型,例如,現(xiàn)有一個(gè)變量的定義如下

let person: {name:string, age:number, gender:string} = {name:'張三', age:10, gender:'男'};

可以看到變量的值為一個(gè)一般對(duì)象,變量的類型為{name:string, age:number, gender:string},此時(shí)就可以聲明一個(gè)接口來(lái)描述該對(duì)象的類型,如下

interface Person {
    name: string;
    age: number;
    gender: string;
}

let person: Person = {name:'張三', age:10, gender:'男'};

2.7、枚舉

2.7.1、枚舉介紹

枚舉(Enumeration)是編程語(yǔ)言中常見(jiàn)的一種數(shù)據(jù)類型,其主要功能是定義一組有限的選項(xiàng),例如,方向(上、下、左、右)或季節(jié)(春、夏、秋、冬)等概念都可以使用枚舉類型定義。

2.7.2、語(yǔ)法說(shuō)明

①枚舉定義

枚舉的定義需使用enum關(guān)鍵字,如下

enum Season {
    SPRING,
    SUMMER,
    AUTUMN,
    WINTER
}

②枚舉使用

枚舉的使用記住兩個(gè)原則即可

  • 枚舉值的訪問(wèn)

像訪問(wèn)對(duì)象屬性一樣訪問(wèn)枚舉值,例如Season.SPRING

  • 枚舉值的類型

枚舉值的類型為enum的名稱,例如Season.SPRINGSeason.SUMMER等值的類型都是Season

let spring:Season = Season.SPRING;

③使用場(chǎng)景

現(xiàn)需要編寫一個(gè)函數(shù)move,其功能是根據(jù)輸入的方向(上、下、左、右)進(jìn)行移動(dòng),此時(shí)就可以先使用枚舉定義好所有可能的輸入選項(xiàng),如下

enum Direction {
    UP,
    BOTTOM,
    LEFT,
    RIGHT
}

move函數(shù)的實(shí)現(xiàn)如下

function move(direction: Direction) {
    if(direction===Direction.UP){
        console.log('向上移動(dòng)');
    }else if(direction===Direction.BOTTOM){
        console.log('向下移動(dòng)');
    }else if(direction===Direction.LEFT){
        console.log('向左移動(dòng)');
    }else{
        console.log('向右移動(dòng)');
    }
}

move(Direction.UP);

2.7.3、賦值

在TypeScript 中,枚舉實(shí)際上是一個(gè)對(duì)象,而每個(gè)枚舉值都是該對(duì)象的一個(gè)屬性,并且每個(gè)屬性都有具體的值,屬性值只支持兩種類型——數(shù)字或字符串。

默認(rèn)情況下,每個(gè)屬性的值都是數(shù)字,并且從 0 開(kāi)始遞增,例如上述案例中的Direction枚舉中,Direction.UP的值為0,Direction.BOTTOM的值為1,依次類推,具體如下

console.log(Direction.UP) //0
console.log(Direction.BOTTOM) //1
console.log(Direction.LEFT) //2
console.log(Direction.RIGHT) //3

除了使用默認(rèn)的數(shù)字作為屬性的值,我們還能手動(dòng)為每個(gè)屬性賦值,例如

enum Direction {
    UP = 1,
    BOTTOM = 2,
    LEFT = 3,
    RIGHT = 4
}

console.log(Direction.UP) //1
console.log(Direction.BOTTOM) //2
console.log(Direction.LEFT) //3
console.log(Direction.RIGHT) //4

再例如

enum Direction {
    UP = 'up',
    BOTTOM = 'bottom',
    LEFT = 'left',
    RIGHT = 'right'
}

console.log(Direction.UP) //up
console.log(Direction.BOTTOM) //bottom
console.log(Direction.LEFT) //left
console.log(Direction.RIGHT) //right

通過(guò)為枚舉屬性賦值,可以賦予枚舉屬性一些更有意義的信息,例如以下枚舉

enum Color {
    Red = 0xFF0000,
    Green = 0x00FF00,
    Blue = 0x0000FF
}

enum FontSize {
    Small = 12,
    Medium = 16,
    Large = 20,
    ExtraLarge = 24
}

2.8、模塊化

2.8.1、模塊化介紹

模塊化是指將復(fù)雜的程序拆解為多個(gè)獨(dú)立的文件單元,每個(gè)文件被稱為一個(gè)模塊。在 TypeScript 中,默認(rèn)情況下,每個(gè)模塊都擁有自己的作用域,這意味著在一個(gè)模塊中聲明的任何內(nèi)容(如變量、函數(shù)、類等)在該模塊外部是不可見(jiàn)的。為了在一個(gè)模塊中使用其他模塊的內(nèi)容,必須對(duì)這些內(nèi)容進(jìn)行導(dǎo)入導(dǎo)出。

【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言,學(xué)習(xí),筆記,開(kāi)發(fā)語(yǔ)言2.8.2、語(yǔ)法說(shuō)明

①導(dǎo)出

導(dǎo)出須使用export關(guān)鍵字,語(yǔ)法如下

export function hello() {
    console.log('hello module A');
}

export const str = 'hello world';

const num = 1;

②導(dǎo)入

導(dǎo)入須使用import關(guān)鍵字,語(yǔ)法如下

import { hello, str } from './moduleA';

hello();
console.log(str);

2.8.3、避免命名沖突

若多個(gè)模塊中具有命名相同的變量、函數(shù)等內(nèi)容,將這些內(nèi)容導(dǎo)入到同一模塊下就會(huì)出現(xiàn)命名沖突。例如,在上述案例的基礎(chǔ)上,又增加了一個(gè) moduleC,內(nèi)容如下

export function hello() {
    console.log('hello module C');
}

export const str = 'module C';

moduleB 同時(shí)引入 moduleA 和 moduleC 的內(nèi)容,如下,顯然就會(huì)出命名沖突

import { hello, str } from "./moduleA";
import { hello, str } from "./moduleC";

hello() //?
console.log(str); //?

①導(dǎo)入重命名

import { hello as helloFromA, str as strFromA } from "./moduleA";
import { hello as helloFromC, str as strFromC } from "./moduleC";

helloFromA();
console.log(strFromA);

helloFromC();
console.log(strFromC);

②創(chuàng)建模塊對(duì)象

上述導(dǎo)入重命名的方式能夠很好的解決命名沖突的問(wèn)題,但是當(dāng)沖突內(nèi)容較多時(shí),這種寫法會(huì)比較冗長(zhǎng)。除了導(dǎo)入重命名外,還可以將某個(gè)模塊的內(nèi)容統(tǒng)一導(dǎo)入到一個(gè)模塊對(duì)象上,這樣就能簡(jiǎn)潔有效的解決命名沖突的問(wèn)題了,具體語(yǔ)法如下

import * as A from "./moduleA";
import * as C from "./moduleC";

A.hello();
console.log(A.str);

C.hello();
console.log(C.str);

2.8.4、默認(rèn)導(dǎo)入導(dǎo)出

①默認(rèn)導(dǎo)出

默認(rèn)導(dǎo)出允許一個(gè)模塊指定一個(gè)(最多一個(gè))默認(rèn)的導(dǎo)出項(xiàng),語(yǔ)法如下

export default function hello(){
    console.log('moduleA');
}

②默認(rèn)導(dǎo)入

由于每個(gè)模塊最多有一個(gè)默認(rèn)導(dǎo)出,因此默認(rèn)導(dǎo)入無(wú)需關(guān)注導(dǎo)入項(xiàng)的原始名稱,并且無(wú)需使用{}。

import helloFromA from "./moduleA";

由于默認(rèn)導(dǎo)入時(shí)無(wú)需關(guān)注導(dǎo)入項(xiàng)的名稱,所以默認(rèn)導(dǎo)出支持匿名內(nèi)容,比如匿名函數(shù),語(yǔ)法如下?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-825603.html

export default function () {
    console.log('moduleB');
}

到了這里,關(guān)于【鴻蒙系統(tǒng)學(xué)習(xí)筆記】TypeScript開(kāi)發(fā)語(yǔ)言的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 鴻蒙開(kāi)發(fā)學(xué)習(xí)筆記1

    目的: 了解Harmony OS產(chǎn)生的背景 理解Harmony OS系統(tǒng)定位,特性,架構(gòu)。 理解Harmony OS和Android的區(qū)別和聯(lián)系 理解鴻蒙生態(tài),OpenHarmony,Harmony OS的區(qū)別和聯(lián)系。 什么是Harmony OS: 全場(chǎng)景 分布式 智慧操作系統(tǒng) 全場(chǎng)景:面向萬(wàn)物互聯(lián)。 分布式:多份任務(wù)分解給不同的。 操作系統(tǒng):管

    2024年02月15日
    瀏覽(19)
  • 【學(xué)習(xí)筆記】鴻蒙UI開(kāi)發(fā)-布局(ArkTs)

    GitHub:LearnHos 碼云:LearnHos 拉伸能力 定義 當(dāng)父容器的尺寸發(fā)生變化時(shí),增加或減少的空間 全部分配 給父容器內(nèi)的 指定子組件 場(chǎng)景1:自動(dòng)填充 實(shí)現(xiàn):容器組件-Row + 基礎(chǔ)組件Blank 場(chǎng)景2:按指定的比例拉伸或收縮 拉伸 當(dāng)父容器在主軸方向上的尺寸 大于 所有子組件的尺寸之

    2024年02月05日
    瀏覽(20)
  • 【鴻蒙系統(tǒng)學(xué)習(xí)筆記】網(wǎng)絡(luò)請(qǐng)求

    【鴻蒙系統(tǒng)學(xué)習(xí)筆記】網(wǎng)絡(luò)請(qǐng)求

    資料來(lái)自官網(wǎng):文檔中心 網(wǎng)絡(luò)管理模塊主要提供以下功能: HTTP數(shù)據(jù)請(qǐng)求:通過(guò)HTTP發(fā)起一個(gè)數(shù)據(jù)請(qǐng)求。 WebSocket連接:使用WebSocket建立服務(wù)器與客戶端的雙向連接。 Socket連接:通過(guò)Socket進(jìn)行數(shù)據(jù)傳輸。 日常開(kāi)發(fā)中HTTP請(qǐng)求使用會(huì)比較多,主要對(duì)HTTP請(qǐng)求進(jìn)行總結(jié)記錄 場(chǎng)景:應(yīng)用

    2024年02月22日
    瀏覽(13)
  • 【鴻蒙系統(tǒng)學(xué)習(xí)筆記】狀態(tài)管理

    【鴻蒙系統(tǒng)學(xué)習(xí)筆記】狀態(tài)管理

    資料來(lái)自官網(wǎng):文檔中心 在聲明式UI編程框架中,UI是程序狀態(tài)的運(yùn)行結(jié)果,用戶構(gòu)建了一個(gè)UI模型,其中應(yīng)用的運(yùn)行時(shí)的狀態(tài)是參數(shù)。當(dāng)參數(shù)改變時(shí),UI作為返回結(jié)果,也將進(jìn)行對(duì)應(yīng)的改變。這些運(yùn)行時(shí)的狀態(tài)變化所帶來(lái)的UI的重新渲染,在ArkUI中統(tǒng)稱為狀態(tài)管理機(jī)制。 View

    2024年02月21日
    瀏覽(18)
  • 鴻蒙HarmonyOS4.0開(kāi)發(fā)應(yīng)用學(xué)習(xí)筆記

    鴻蒙HarmonyOS4.0開(kāi)發(fā)應(yīng)用學(xué)習(xí)筆記

    鴻蒙harmony開(kāi)發(fā)文檔指南 DevEco Studio下載地址 選擇或者安裝環(huán)境 選擇和下載SDK 安裝總覽 編輯器界面 2.1變量聲明 2.2條件控制 2.3循環(huán)迭代 2.4函數(shù) 2.5類和接口 2.6模塊開(kāi)發(fā) 通用功能抽取到單獨(dú)的ts文件,每個(gè)文件都是一個(gè)模塊(module)。 模塊可以相互加載,提高代碼復(fù)用性。 crea

    2024年02月04日
    瀏覽(28)
  • 鴻蒙開(kāi)發(fā)|鴻蒙系統(tǒng)的介紹(為什么要學(xué)習(xí)鴻蒙開(kāi)發(fā)|鴻蒙系統(tǒng)的官方定義|鴻蒙和安卓、ios的對(duì)比)

    鴻蒙開(kāi)發(fā)|鴻蒙系統(tǒng)的介紹(為什么要學(xué)習(xí)鴻蒙開(kāi)發(fā)|鴻蒙系統(tǒng)的官方定義|鴻蒙和安卓、ios的對(duì)比)

    鴻蒙開(kāi)發(fā)學(xué)習(xí)是一項(xiàng)探索性的工作,旨在開(kāi)發(fā)一個(gè)全場(chǎng)景分布式操作系統(tǒng),覆蓋所有設(shè)備,讓消費(fèi)者能夠更方便、更直觀地使用各種設(shè)備。 鴻蒙系統(tǒng)定位為面向未來(lái)、面向全場(chǎng)景(移動(dòng)辦公、運(yùn)動(dòng)健康、社交通信、媒體娛樂(lè)等)的分布式操作系統(tǒng)。它通過(guò)分布式技術(shù),將各種

    2024年01月15日
    瀏覽(21)
  • 鴻蒙開(kāi)發(fā)學(xué)習(xí)筆記1——真機(jī)運(yùn)行hello world

    鴻蒙開(kāi)發(fā)學(xué)習(xí)筆記1——真機(jī)運(yùn)行hello world

    學(xué)習(xí)任何語(yǔ)言和框架的第一步,永遠(yuǎn)都是跑通熟悉的“hello world”,本文將介紹鴻蒙開(kāi)發(fā)如何跑通“hello world”。 一、構(gòu)建第一個(gè)ArkTS應(yīng)用(fa模型) 說(shuō)明:請(qǐng)使用DevEco Studio V3.0.0.601 Beta1及更高版本。下載鏈接:https://developer.harmonyos.com/cn/develop/deveco-studio 。 (1)創(chuàng)建ArkTS工程

    2024年02月12日
    瀏覽(16)
  • 【華為鴻蒙系統(tǒng)學(xué)習(xí)】- 如何利用鴻蒙系統(tǒng)進(jìn)行App項(xiàng)目開(kāi)發(fā)|自學(xué)篇

    【華為鴻蒙系統(tǒng)學(xué)習(xí)】- 如何利用鴻蒙系統(tǒng)進(jìn)行App項(xiàng)目開(kāi)發(fā)|自學(xué)篇

    ??個(gè)人主頁(yè):?Aileen_0v0 ??熱門專欄:?華為鴻蒙系統(tǒng)學(xué)習(xí)|計(jì)算機(jī)網(wǎng)絡(luò)|數(shù)據(jù)結(jié)構(gòu)與算法 ??個(gè)人格言: \\\"沒(méi)有羅馬,那就自己創(chuàng)造羅馬~\\\" 目錄 ?創(chuàng)建鴻蒙第一個(gè)App項(xiàng)目? 項(xiàng)目創(chuàng)建 工程目錄區(qū) ?預(yù)覽區(qū) 運(yùn)行Hello World 基本工程目錄? ?ws:工程級(jí)別目錄? entry:模塊級(jí)別目錄? app.json5 modu

    2024年02月04日
    瀏覽(17)
  • OpenHarmony鴻蒙原生應(yīng)用開(kāi)發(fā),ArkTS、ArkUI學(xué)習(xí)踩坑學(xué)習(xí)筆記,持續(xù)更新中。

    OpenHarmony鴻蒙原生應(yīng)用開(kāi)發(fā),ArkTS、ArkUI學(xué)習(xí)踩坑學(xué)習(xí)筆記,持續(xù)更新中。

    結(jié)論:在BIOS里面將Hyper-V打開(kāi),DevEco Studio模擬器可以成功啟動(dòng)。 如果在另外的文件中引用組件,需要使用export導(dǎo)出,并在使用的頁(yè)面import該自定義組件。 1.自定義組件(被導(dǎo)入組件) 2.組合組件(引用自定義組件) 1、main_pages.json配置文件配置靜態(tài)路由地址,配置文件

    2024年02月04日
    瀏覽(20)
  • 【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開(kāi)發(fā)|自學(xué)篇

    【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開(kāi)發(fā)|自學(xué)篇

    ? ??個(gè)人主頁(yè):?Aileen_0v0 ??熱門專欄:?華為鴻蒙系統(tǒng)學(xué)習(xí)|計(jì)算機(jī)網(wǎng)絡(luò)|數(shù)據(jù)結(jié)構(gòu)與算法 ??個(gè)人格言: \\\"沒(méi)有羅馬,那就自己創(chuàng)造羅馬~\\\" 目錄 HarmonyOS 4.0 技術(shù)介紹: HarmonyOS三大特征: ? ? 1.實(shí)現(xiàn)硬件互助,資源共享。 ?????2.?面向開(kāi)發(fā)者,實(shí)現(xiàn)一次開(kāi)發(fā),多端部署。 ?3.一套操

    2024年02月05日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包