


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 零基礎(chǔ)學(xué)透 ypeScr pt / 4 3 對 合并的愛與恨對 合并的愛與恨更新時間 2019 07 12 09:24:27理想的書籍是智慧的鑰匙。合并是指 TypeScr pt 編譯器會將名字相同的多個 合并為一個 ,合并后的 同時擁有多個 的特性。我們知道在 JavaScr p 中,使用var關(guān)鍵字定義變量時,定義相同名字的變量,后面的會覆蓋前面的值。使用et 定義變量和使用 const 定義常量時,不 名字重復(fù)。在 TypeScr pt 中,接 、命名空間是可以多次 的,最后TypeScr pt 會將多個同名 合并為一個。我們下來看個簡單的例子:interface nfo name s
2、tringinterface nfo age numberlet info nfoinfo = / error 類型“ name string ”中缺少屬性“age” name 'lison'info = / right name 'lison' age 18可以看到,我們定義了兩個同名接 Info,每個接 里都定義了一個必備屬性,最后定義nfo類型為Info時, nfo的定義要求同時包含name和age屬性。這就是 合并的簡單示例,接下來我們詳細(xì)學(xué)習(xí)。4.3.1. 補充知識TypeScr pt的所有 概括起來,會創(chuàng)建這三種實體之一:命名空間、類型和值:命名空間
3、的創(chuàng)建實際是創(chuàng)建一個對象,對象的屬性是在命名空間里export導(dǎo)出的內(nèi)容;類型的 是創(chuàng)建一個類型并賦給一個名字;值的 就是創(chuàng)建一個在JavaScr pt中可以使用的值。下面這個表格會清晰的告訴你,每一種 類型會創(chuàng)建這三種實體中的哪種,先來說明一下,第一列是指 的內(nèi)容,每一行包含4列,表明這一行中,第一列的 類型創(chuàng)建了后面三列哪種實體,打鉤即表示創(chuàng)建了該實體:類型創(chuàng)建了命名空間創(chuàng)建了類型創(chuàng)建了值NamespaceClassEnumnterfaceType Alias類型別名FunctionVariable可以看到,只 名空間創(chuàng)建了命名空間這種實體。C ass、Enum兩個,C ass即是實際的值
4、也作為類使用,Enum 編譯為JavaScr pt后也是實際值,而且我們講過,一定條件下,它的成員可以作為類型使用;Interface和類型別名 是純粹的類型;而Func ton和Var ab e只是創(chuàng)建了JavaScr pt中可用的值,不能作為類型使用,注意這里Var ab e是變量,不是常量,常量是可以作為類型使用的。4.3.2. 合并接口我們在本節(jié)課一開始的例子中,簡單示范了一下接 的合并,下面我們來補充一些內(nèi)容。多個同名接 ,定義的非函數(shù)的成員命名應(yīng)該是不重復(fù)的,如果重復(fù)了,類型應(yīng)該是相同的,否則將會報錯。interface nfo name stringinterface nfo a
5、ge numberinterface nfo age boolean / error 后續(xù)屬性 必須屬于同 類型 屬性“age”的類型必須為“number”,但此處卻為類型“boolean”對于函數(shù)成員,每個同名函數(shù)成員都會被當(dāng)成這個函數(shù)的重載,且合并時后面的接 具有更高的優(yōu)先級。來看下多個同名函數(shù)成員的例子:interface Res getRes(input string) numberinterface Res getRes(input number) stringconst res Res = getRes (input any) any => if (typeof input
6、= 'string') return input length else return String(input)res getRes('123') length / error 類型“number” 不存在屬性“l(fā)ength”4.3.3. 合并命名空間同名命名空間最后會將多個命名空間導(dǎo)出的內(nèi)容進(jìn)行合并,如下面兩個命名空間:namespace Validation export const checkNumber = () => namespace Validation export const checkString = () => 面定義兩個同名
7、命名空間,效果相當(dāng)于:namespace Validation export const checkNumber = () => export const checkString = () => 在命名空間里,有時我們并不是把所有內(nèi)容都對外部可見,對于沒有導(dǎo)出的內(nèi)容,在其它同名命名空間內(nèi)是無法訪問的:namespace Validation const numberReg = /0-9+$/export const stringReg = /A-Za-z+$/ export const checkString = () => namespace Validation expo
8、rt const checkNumber = (value any) => return numberReg test(value) / error 找不到名稱“numberReg”面定義的兩個命名空間,numberReg沒有使用export導(dǎo)出,所以在第二個同名命名空間內(nèi)是無法使用的,如果給const numberReg 前面加 export,就可以在第二個命名空間使用了。4.3.4. 不同類型合并命名空間分別和類、函數(shù)、枚舉都可以合并,下面我們 說明:(1) 命名空間和類這里要求同名的類和命名空間在定義的時候,類的定義必須在命名空間前面,最后合并之后的效果,一個包含一些以命名空間導(dǎo)出
9、內(nèi)容為靜態(tài)屬性的類,來看例子:class Validation checkType() namespace Validation export const numberReg = /0-9+$/ export const stringReg = /A-Za-z+$/ export const checkString = () => namespace Validation export const checkNumber = (value any) => return numberReg test(value)console log(Validation prototype) /
10、checkType fun () console log(Validation prototype constructor)/*checkNumber checkString numberReg stringReg*/(2) 命名空間和函數(shù)在JavaScr pt中,函數(shù)也是對象,所以可以給一個函數(shù)設(shè)置屬性,在TypeScr pt中,就可以通過 合并實現(xiàn)。但同樣要求,函數(shù)的定義要在同名命名空間前面,我們再拿之前講過的計數(shù)器的實現(xiàn)來看下,如何利用計數(shù)器的定義:function countUp () countUp count+namespace countUp export let count =
11、 0countUp() countUp()console log(countUp count) / 2(3) 命名空間和枚舉可以通過命名空間和枚舉的合并,為枚舉拓展內(nèi)容,枚舉和同名命名空間的先后順序是沒有要求的,來看例子:enum Colors redgreen bluenamespace Colors export const yellow = 3console log(Colors)/*0 "red"1 "green"2 "blue"red 0green 1blue 2yellow 3*/通過打印結(jié)果你可以發(fā)現(xiàn),雖然我們使用命名空間增加了枚舉的成員,但是最后輸出的值只有key到ndex的 , 沒有ndex到key的 。小結(jié)本小節(jié)我們學(xué)習(xí)了編譯器對于相同命名的 的合并策略,這個策略能夠幫我們實現(xiàn)一些類型定義的復(fù)用,比如多個函數(shù)定義可合并為一個函數(shù)的重載,還可以利用 合并實現(xiàn)一些復(fù)雜的類型定義。但是有時我們會無意地定義了一個之前定義過的名字,造成 合并了,再使用這個新定義的時候,發(fā)現(xiàn)應(yīng)用了一些這里未定義的類型校驗,所以我們在定義名字的時候要注意這一點。本小節(jié)我們講了接 、命名空間、不同類型是如何合并的,也學(xué)習(xí)了如何利用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司聯(lián)誼現(xiàn)場活動方案
- 公司擺攤美食活動方案
- 公司自制活動策劃方案
- 公司男女活動策劃方案
- 公司春季燒烤活動方案
- 公司旅游活動策劃方案
- 公司組員聚會活動方案
- 公司洞頭團(tuán)建活動方案
- 公司聚餐系列活動方案
- 公司組織撕名牌活動方案
- ISO28000:2022供應(yīng)鏈安全管理體系
- (2024年)《莊子》二則課件
- 化療病人的營養(yǎng)膳食課件
- 高考日語復(fù)習(xí):日語形容詞用法專項課件
- “拍賣委托書–古董拍賣”
- 大型火災(zāi)戰(zhàn)評報告
- 切口感染護(hù)理查房
- 高二語文選擇性必修下冊理解性默寫及其答案
- 品管圈QCC成果匯報提高患者健康教育知曉率
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)項目工程建設(shè)進(jìn)度計劃與措施
- 西方經(jīng)濟(jì)學(xué)-馬工程重點教材-第16章
評論
0/150
提交評論