Angular 如何使用第三方庫的方法
Angular 的組件與模塊看似好像與現(xiàn)有各種第三方類庫(例如:lodash、moment 等)使用上有點格格不入,這很大的原因是 TypeScript 造成的假象。三足鼎立的前端其實都是雷同的,不管是哪種前端框架都可以使用到這些第三方類庫。
以下我將從另一個視角解釋 Angular 如何使用第三方類庫的一種經(jīng)驗做法。
一、寫在前面
在開始之前,需要先了解一下 TypeScript 模塊系統(tǒng) ——模塊是指在其自身作用域里執(zhí)行,而不是在全局作用域里;模塊間是依靠 export 和 import 建立關(guān)系。編譯器在編譯過程中,也是依賴這種關(guān)系來定位需要編譯的文件。
TypeScript 依然還是以 JavaScript 文件的形式發(fā)布類庫,這會導(dǎo)致類型無法表述,需要配合聲明文件對其進行類型描述;因此聲明文件成了類庫一個必不可少的組成部分。
二、分類
Angular 使用 TypeScript 語言開發(fā),誠如上一小節(jié)講來說,要想讓一個類庫被運用,要件是有沒有聲明文件。
有聲明文件
要分清類庫是否有聲明文件 *.d.ts,可以從兩個方面來確認這件事:
1、類庫自帶
從 Npm 安裝一個依賴包后,可以直接檢查其庫的 package.json 是否包含 typings 節(jié)點,例如 moment:
"typings": "./moment.d.ts"
2、TypeSearch檢索
TypeScript 提供了一個叫 TypeSearch 網(wǎng)站,可以直接輸入關(guān)鍵詞檢查是否包含該類庫的聲明文件。
例如 lodash 可以在列表中點擊會跳轉(zhuǎn)至 npm 網(wǎng)站,并且會看到這樣的一個命令:
npm install --save @types/lodash
無聲明文件
這類情況還蠻常見,例如早一點時間 G2 就沒有聲明文件,這種情況下只能自行編寫聲明文件。
Angular Cli 創(chuàng)建的項目會包含一個 src/typings.d.ts 聲明文件,它會自動包含在全局聲明定義中,而把這些類庫的聲明信息寫在這里面再好不過。
一般而言自己很難對一個類庫寫一個完整的聲明文件,這對于成本來說太不合算,因此往往都是只對部分全局對象做一個 any (表示忽略該靜態(tài)類型檢查)亦可,例如:
// src/typings.d.ts declare var G2: any;
三、如何使用?
聲明文件是紐帶,依然以這種方式來劃分如何使用。
對于有聲明文件,無需額外做什么,只需在需要模塊的地方使用 import 來導(dǎo)入即可,例如:
import * as moment from 'moment'; moment(); // 當(dāng)前時間
無聲明文件
重要來看無聲明文件時怎么做,前面說到使用 any 來表示忽略靜態(tài)類型檢查,意味者無法享受聲明文件帶來的智能提示快感。
像 G2 ,我們可以在項目的任意位置直接使用它,但也僅僅只能識別 G2 變量,而實例的方法或?qū)傩允遣豢芍摹?/p>
// app.component.ts const g2 = new G2(); g2. // 輸入 `.` 后是不會有任何方法或?qū)傩?
除此之外 TypeScript 編譯過程中也不會對 G2 做任何類型檢查,G2 是否真的存在只能由自己把握。對于 Angular 而言,是需要額外在 .angular-cli.json 的 scripts 節(jié)點上明確加載這些模塊。
// .angular-cli.json "scripts": [ "../node_modules/@antv/g2/dist/g2.min.js" ]
TypeScript 編譯后依然還是 JavaScript 代碼,假如不手動加載 G2 相關(guān) JavaScript 文件,自然在運行過程中會提供未找到 G2 的錯誤。
總結(jié)
從 TypeScript 的視角來看如何使用第三方類庫,會有不同的感覺,只是一個簡單的非靠譜但有效的描述。希望懂得多的人手下留情。
這里無意黑 G2 的意思,現(xiàn) G2 已經(jīng)提供了聲明文件了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Angular項目如何使用攔截器?httpClient?請求響應(yīng)處理
這篇文章主要介紹了Angular項目簡單使用攔截器httpClient請求響應(yīng)處理,目前我的Angular版本是Angular?17.3,版本中實現(xiàn)請求和響應(yīng)的攔截處理了,這種機制非常適合添加如身份驗證頭、錯誤統(tǒng)一處理、日志記錄等功能,需要的朋友可以參考下2024-06-06利用Ionic2 + angular4實現(xiàn)一個地區(qū)選擇組件
ionic是一個移動端開發(fā)框架,使用hybird技術(shù),只要使用前端開發(fā)技術(shù)就可以開發(fā)出電腦端,安卓端和ios端的站點程序。下面這篇文章主要給大家介紹了關(guān)于利用Ionic2 + angular4實現(xiàn)一個地區(qū)選擇組件的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07Angular2使用Augury來調(diào)試Angular2程序
這篇文章主要介紹了Angular2使用Augury來調(diào)試Angular2程序,非常具有實用價值,需要的朋友可以參考下2017-05-05Angular.JS內(nèi)置服務(wù)$http對數(shù)據(jù)庫的增刪改使用教程
我們可以使用內(nèi)置的$http服務(wù)直接同外部進行通信。$http服務(wù)只是簡單的封裝了瀏覽器原生的XMLHttpRequest對象,下面這篇文章主要給大家介紹了關(guān)于Angular.JS內(nèi)置服務(wù)$http對數(shù)據(jù)庫的增刪改等操作的相關(guān)資料,需要的朋友可以參考下。2017-05-05體驗jQuery和AngularJS的不同點及AngularJS的迷人之處
AngualrJS是一個很貼心的web應(yīng)用框架,本篇通過jQuery和Angular兩種方式來實現(xiàn)同一個實例,從而體驗兩者的不同點以及AngularJS的迷人之處2016-02-02