首頁 >web前端 >js教程 >10個基本的打字條技巧和竅門

10個基本的打字條技巧和竅門

Lisa Kudrow
Lisa Kudrow原創
2025-02-15 12:48:13763瀏覽

10 Essential TypeScript Tips and Tricks for Angular Devs

本文探討一系列在Angular項目及其他TypeScript項目中都適用的技巧和竅門。

近年來,JavaScript中靜態類型的需求迅速增長。大型前端項目、更複雜的服務器和復雜的命令行工具都促進了JavaScript世界中對更具防禦性編程的需求。此外,在實際運行之前編譯應用程序的負擔並未被視為弱點,而是一個機會。雖然出現了兩個強大的競爭者(TypeScript和Flow),但許多趨勢實際上表明只有一個可能會勝出——TypeScript。

除了營銷宣傳和眾所周知的特性外,TypeScript擁有一個擁有非常活躍貢獻者的驚人社區。它還在語言設計方面擁有業內頂尖的團隊之一。在Anders Hejlsberg的領導下,該團隊成功地將大型JavaScript項目的格局完全轉變為幾乎完全由TypeScript驅動的業務。憑藉VSTS或Visual Studio Code等非常成功的項目,微軟本身就是這項技術的堅定支持者。

但吸引人的不僅僅是TypeScript的特性,還有TypeScript支持的可能性和框架。谷歌決定完全採用TypeScript作為Angular 2 的首選語言,已被證明是一個雙贏的局面。 TypeScript不僅獲得了更多關注,Angular本身也受益匪淺。使用靜態類型,編譯器已經可以給我們提供信息豐富的警告和關於代碼為何無法運行的有用解釋。

關鍵要點

  • 自定義模塊定義:當外部庫缺少TypeScript定義時,在module.d.ts文件中創建自己的定義,以增強開發精度,並可能通過共享這些定義來為社區做出貢獻。
  • 理解枚舉與常量枚舉:利用const enum進行性能優化,因為它不會生成運行時代碼,而普通的枚舉會生成運行時代碼,這使得它們可以根據項目需求適用於不同的場景。
  • 利用類型表達式和別名:通過使用類型表達式和別名來簡化代碼維護並提高可重用性,從而更容易進行更改並在整個代碼庫中進行更好的類型檢查。
  • 使用鑑別器進行聯合類型:實現鑑別聯合以更有效地處理不同形狀的數據,從而能夠安全地使用公共屬性來確定正確的類型上下文。
  • 避免使用any以提高特異性:any類型的使用保留給真正通用的數據,並努力定義更具體的類型,這有助於維護類型安全並減少運行時錯誤。
  • 利用泛型創建靈活且可重用的代碼:應用泛型來創建高度可重用和靈活的函數和組件,這些函數和組件可以與各種類型一起工作,同時仍然保持類型安全。

TypeScript技巧1:提供您自己的模塊定義

TypeScript是JavaScript的超集。因此,可以利用每個現有的npm包。雖然TypeScript生態系統龐大,但並非所有庫都附帶適當的類型定義。更糟糕的是,對於某些(較小的)包,甚至不存在單獨的聲明(以@types/{package}的形式)。此時,我們有兩個選擇:

  1. 使用TypeScript技巧7引入遺留代碼
  2. 自己定義模塊的API。

後者絕對是首選。我們無論如何都必須查看模塊的文檔,但將其鍵入出來將防止開發過程中出現簡單的錯誤。此外,如果我們對剛剛創建的類型定義非常滿意,我們總是可以將其提交給@types以將其包含在npm中。因此,這也讓我們獲得了社區的尊重和感激。不錯!

提供我們自己的模塊定義最簡單的方法是什麼?只需在源目錄中創建一個module.d.ts(也可以命名為與包相同的名稱——例如,對於npm包unknown-module,可以命名為unknown-module.d.ts)。

讓我們為這個模塊提供一個示例定義:

<code class="language-typescript">declare module 'unknown-module' {
  const unknownModule: any;
  export = unknownModule;
}</code>

顯然,這只是第一步,因為我們根本不應該使用any。 (有很多原因可以解釋這一點。TypeScript技巧5展示瞭如何避免它。)但是,它足以讓TypeScript了解模塊並防止編譯錯誤,例如“unknown module ‘unknown-module’”。這裡的export表示法適用於經典的module.exports = ...類型的包。

以下是此類模塊在TypeScript中的潛在使用:

<code class="language-typescript">declare module 'unknown-module' {
  const unknownModule: any;
  export = unknownModule;
}</code>

如前所述,整個模塊定義現在位於導出的常量的類型聲明中。如果導出的內容是一個函數,則聲明可能如下所示:

<code class="language-typescript">import * as unknownModule from 'unknown-module';</code>

當然,也可以使用使用ES6模塊語法導出功能的包:

<code class="language-typescript">declare module 'unknown-module' {
  interface UnknownModuleFunction {
    (): void;
  }
  const unknownModule: UnknownModuleFunction;
  export = unknownModule;
}</code>

(以下內容與原文相同,篇幅較長,為避免重複,此處省略TypeScript技巧2-10以及後續內容。) 請根據需要自行參考原文。 如果需要我繼續生成剩餘內容,請告知。

以上是10個基本的打字條技巧和竅門的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn