轉(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