TypeScript基礎(chǔ)入門 - 類型兼容性 - 枚舉和類

轉(zhuǎn)發(fā)

TypeScript基礎(chǔ)入門 - 類型兼容性 - 枚舉和類

項(xiàng)目實(shí)踐倉(cāng)庫(kù)

https://github.com/durban89/typescript_demo.git
tag: 1.4.0

為了保證后面的學(xué)習(xí)演示需要安裝下ts-node,這樣后面的每個(gè)操作都能直接運(yùn)行看到輸出的結(jié)果。

npm install -D ts-node

后面自己在練習(xí)的時(shí)候可以這樣使用

npx ts-node 腳本路徑

枚舉

枚舉類型與數(shù)字類型兼容,并且數(shù)字類型與枚舉類型兼容。不同枚舉類型之間是不兼容的。比如,

enum Status {
    Ready,
    Waiting,
};

enum Color {
    Color1,
    Color2,
    Color3,
};

let s = Status.Ready;
s = Color.Color1;

運(yùn)行后會(huì)有類似如下的錯(cuò)誤提示

? Unable to compile TypeScript:
src/type_compatibility_2.ts(13,1): error TS2322: Type 'Color.Color1' is not assignable to type 'Status'.

類與對(duì)象字面量和接口差不多,但有一點(diǎn)不同:類有靜態(tài)部分和實(shí)例部分的類型。 比較兩個(gè)類類型的對(duì)象時(shí),只有實(shí)例的成員會(huì)被比較。 靜態(tài)成員和構(gòu)造函數(shù)不在比較的范圍內(nèi)。如下實(shí)例演示

class PersonType {
    name: string;
    constructor(name: string, age: number) {}
}

class AnimalType {
    name: string;
    constructor (name: string) {}
}

let PT: PersonType = new PersonType('a', 1);
let AT: AnimalType = new AnimalType('a');

AT = PT
PT = AT

當(dāng)我們運(yùn)行這段代碼的時(shí)候,會(huì)發(fā)現(xiàn)沒有報(bào)任何錯(cuò)誤

類的私有成員

類中的私有成員和受保護(hù)成員會(huì)影響其兼容性。檢查類的實(shí)例是否兼容時(shí),如果目標(biāo)類型包含私有成員,則源類型還必須包含源自同一類的私有成員。同樣,這同樣適用于具有受保護(hù)成員的實(shí)例。這允許類與其超類兼容,但不允許使用來自不同繼承層次結(jié)構(gòu)的類,否則這些類具有相同的形狀。

本實(shí)例結(jié)束實(shí)踐項(xiàng)目地址

https://github.com/durban89/typescript_demo.git
tag: 1.4.1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容