摘要:模塊模塊是自聲明的,兩個(gè)模塊之間的關(guān)系是通過在文件級(jí)別上使用和來建立的。類似地,我們必須通過導(dǎo)入其他模塊導(dǎo)出的變量函數(shù)類等。模塊使用模塊加載器去導(dǎo)入它的依賴,模塊加載器在代碼運(yùn)行時(shí)會(huì)查找并加載模塊間的所有依賴。
學(xué)習(xí)Angular 2 , 《揭秘Angular 2》讀書筆記。Angular2 選擇 TypeScript 作為其官方最主要的構(gòu)建語音,這意味著掌握 TypeScript 語音將更有利于高效地開發(fā) Angular 應(yīng)用。
模塊模塊是自聲明的,兩個(gè)模塊之間的關(guān)系是通過在文件級(jí)別上使用 import 和 export 來建立的。TypeScript 和 ES6 一樣,任何包含頂級(jí) import 或者 export 的文件都會(huì)被當(dāng)成一個(gè)模塊。
模塊是在其自身的作用域里執(zhí)行,并不是在全局作用域,這意味著定義在模塊里面的變量、函數(shù)和類等在模塊外部是不可見的,除非明確地使用 export 導(dǎo)出它們。類似地,我們必須通過 import 導(dǎo)入其他模塊導(dǎo)出的變量、函數(shù)、類等。
模塊使用模塊加載器去導(dǎo)入它的依賴,模塊加載器在代碼運(yùn)行時(shí)會(huì)查找并加載模塊間的所有依賴。常用的模塊加載器有 SystemJs 和 Webpack。
模塊導(dǎo)出方式
模塊可以通過導(dǎo)出方式來提供變量、函數(shù)、類、類型別名、接口等給外部模塊調(diào)用,導(dǎo)出的方式分為以下三種:
導(dǎo)出聲明
任何模塊都能夠通過 export 關(guān)鍵字來導(dǎo)出,示例代碼如下:
export const COMPANY = "EG"; // 導(dǎo)出變量 export interface IdentiryValidate { // 導(dǎo)出接口 isValidate(s: string): boolean; } export class ErpIdentityValidate implements IdentiryValidate { // 導(dǎo)出類 isValidate(s: string) { return true; } }
導(dǎo)出語句
有時(shí)我們需要對(duì)導(dǎo)出的模塊進(jìn)行重命名,這個(gè)時(shí)候就用到了導(dǎo)出語句,示例代碼如下:
export class ErpIdentityValidate implements IdentiryValidate { // 導(dǎo)出類 isValidate(s: string) { return true; } } export { ErpIdentityValidate } export { ErpIdentityValidate as EGIdentityValidate }; // 重命名
模塊包裝
有時(shí)候我們需要修改和擴(kuò)展已有的模塊,并導(dǎo)出供其他模塊調(diào)用,這時(shí),可以時(shí)候模塊包裝來再次導(dǎo)出,我看到別的文章將其稱為 “重新導(dǎo)出” 。示例代碼如下:
export { ErpIdentityValidate as EGIdentityValidate } from "./ErpIdentityValidate";
一個(gè)模塊可以包裹多個(gè)模塊,并把新的內(nèi)容以一個(gè)新的模塊導(dǎo)出,示例代碼如下:
export * from "./IdentiryValidate"; export * from "./ErpIdentityValidate";
模塊導(dǎo)入方式
模塊導(dǎo)入與模塊導(dǎo)出相對(duì)應(yīng),可以使用 import 關(guān)鍵字來導(dǎo)入當(dāng)前模塊依賴的外部模塊。導(dǎo)入方式有如下幾種:
導(dǎo)入一個(gè)模塊
import { ErpIdentityValidate } from "./ErpIdentityValidate"; let erpValide = new ErpIdentityValidate();
別名導(dǎo)入
import { ErpIdentityValidate as ER} from "./ErpIdentityValidate"; let erpValide = new ERP ();
另外,我們也可以對(duì)整個(gè)模塊進(jìn)行別名導(dǎo)入,將整個(gè)模塊導(dǎo)入到一個(gè)變量,并通過這個(gè)變量來訪問模塊的導(dǎo)出部分,實(shí)例代碼如下:
import * as validator from "./ErpIdentityValidate"; let myValidate = new validator.ErpIdentityValidate();
模塊的默認(rèn)導(dǎo)出
模塊可以用 default 關(guān)鍵字實(shí)現(xiàn)默認(rèn)導(dǎo)出的功能,每個(gè)模塊可以有一個(gè)默認(rèn)導(dǎo)出。類 和 函數(shù)聲明 可以直接省略導(dǎo)出名來實(shí)現(xiàn)默認(rèn)導(dǎo)出。默認(rèn)導(dǎo)出有利于減少調(diào)用方調(diào)用模塊的層數(shù),省去一些冗余的模塊前綴書寫,示例代碼如下:
默認(rèn)導(dǎo)出類
// ErpIdentityValidate.ts export default class ErpIdentityValidate implements IdentiryValidate { isValidate(s: string) { return true; } } // test.ts import validator from "./ErpIdentityValidate"; let erp = new validator();
默認(rèn)導(dǎo)出函數(shù)
// nameServiceValidate.ts export default function(s: string){ return true; // 具體代碼略 } // test.ts import validate from "./nameServiceValidate"; let name = "Angular"; // 使用導(dǎo)出函數(shù) console.log(`"${name}" ${validate(name)? " matches": " does not matches"}`);
默認(rèn)導(dǎo)出值
// constantService.ts export default "Angular"; // test.ts import name form "./constantService"; console.log(name);
模塊設(shè)計(jì)原則
在模塊設(shè)計(jì)中,公共遵循一些原則有利于更好地編寫和維護(hù)項(xiàng)目代碼,下面列出幾點(diǎn)模塊設(shè)計(jì)的原則
1.盡可能的在頂層導(dǎo)出
2.明確地列出導(dǎo)入的名字
import {ClassTest, FuncTest} from "./ModuleTest";
3.使用命名空間模式導(dǎo)出
// MyLargeModule.ts export class Dog {} export class Cat {} export class Tree {} // test.ts import * as myLargeModule from "./MyLargeModule"; let x = new myLargeModule.Dog();
3.使用模塊包裝進(jìn)行擴(kuò)展
我們可能經(jīng)常需要去擴(kuò)展一個(gè)模塊的功能,推薦的方案是不要去改變?cè)瓉淼膶?duì)象,而是導(dǎo)出一個(gè)新的對(duì)象來提供新的功能,示例代碼如下:
// ModuleA.ts export class ModuleA { constructor(){/*... */} sayHello() {/*... */} } // ModuleB.ts import { ModuleA } from "./ModuleA"; class ModuleB extends ModuleA { constructor(){super(); /*... */} // 添加新方法 sayHi() {/*... */} } export { ModuleB as ModuleA } // Test.ts import { ModuleA } from "./ModuleB"; let C = new ModuleA();
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82357.html
摘要:添加了可選的靜態(tài)類型注意并不是強(qiáng)類型和基于類的面向?qū)ο缶幊?。類類型接口示例接口更注重功能的設(shè)計(jì),抽象類更注重結(jié)構(gòu)內(nèi)容的體現(xiàn)模塊中引入了模塊的概念,在中也支持模塊的使用。 一:Typescript簡(jiǎn)介 維基百科: TypeScript是一種由微軟開發(fā)的自由和開源的編程語言。它是JavaScript的一個(gè)嚴(yán)格超集,并添加了可選的靜態(tài)類型和基于類的面向?qū)ο缶幊?。C#的首席架構(gòu)師以及Delp...
摘要:接口類型檢查不會(huì)去檢查屬性順序,但是屬性的必須存在且類型匹配。函數(shù)的返回值函數(shù)的返回值類型必須與接口定義的返回值保持一致。示例代碼如下張三李四張三輸出張三輸出張三索引簽名支持字符串和數(shù)字兩種數(shù)據(jù)類型。 學(xué)習(xí)Angular 2 , 《揭秘Angular 2》讀書筆記。Angular2 選擇 TypeScript 作為其官方最主要的構(gòu)建語音,這意味著掌握 TypeScript 語音將更有利...
摘要:靜態(tài)屬性靜態(tài)方法目前支持靜態(tài)方法表示,類屬性及靜態(tài)屬性目前作為提案還未正式成為標(biāo)準(zhǔn)。在中,抽象類不能用來實(shí)例化對(duì)象,主要做為其它派生類的基類使用。不同于接口,抽象類可以包含成員的實(shí)現(xiàn)細(xì)節(jié)。中也是這樣規(guī)定的抽象類不允許直接被實(shí)例化。 嘗試重寫 在此之前,通過《JavaScript => TypeScript 入門》已經(jīng)掌握了類型聲明的寫法。原以為憑著那一條無往不利的規(guī)則,就可以開開心心的...
摘要:前面我們已經(jīng)說了大部分的核心內(nèi)容,接下來我們就說說如何用開發(fā)實(shí)際項(xiàng)目。因?yàn)楹徒Y(jié)合很緊密,資料也很多,而且我會(huì)找機(jī)會(huì)專門說下這方面的知識(shí),所以我們將重點(diǎn)放到如何用結(jié)合上來。所以前面打牢基礎(chǔ),現(xiàn)在我們開始實(shí)際組建工作流。 前面我們已經(jīng)說了大部分typescript的核心內(nèi)容,接下來我們就說說如何用typescript開發(fā)實(shí)際項(xiàng)目。 因?yàn)閍ngular和typescript結(jié)合很緊密,資料也...
摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 1695·2023-04-25 20:16
閱讀 3882·2021-10-09 09:54
閱讀 2713·2021-09-04 16:40
閱讀 2527·2019-08-30 15:55
閱讀 843·2019-08-29 12:37
閱讀 2749·2019-08-26 13:55
閱讀 2918·2019-08-26 11:42
閱讀 3164·2019-08-23 18:26