使用 TypeScript 的 Node.js

什麼是 TypeScript

TypeScript 是一個時髦的開源語言,由微軟維護和開發。它受到全世界許多軟體開發人員的喜愛和使用。

基本上,TypeScript 是 JavaScript 的一個超集,為語言添加了新的功能。最顯著的新增功能是靜態類型定義,在純 JavaScript 中是不存在的。由於有了類型,例如,我們可以聲明我們的函數期望的參數類型、返回的類型,或者我們正在創建的對象的確切形狀。TypeScript 是一個非常強大的工具,在 JavaScript 項目中打開了新的可能性。它通過在代碼發布之前防止許多錯誤,使我們的代碼更加安全和健壯-它在代碼開發期間檢測問題,並與像 Visual Studio Code 這樣的代碼編輯器完美集成。

我們可以稍後討論其他 TypeScript 的好處,現在讓我們看一些例子!

例子

看看這段代碼片段,然後我們可以一起解開它

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 23,
};

const isJustineAnAdult: boolean = isAdult(justine);

第一部分(帶有 type 關鍵字)負責宣告我們自定義的用戶物件類型。稍後,我們將利用這個新建的類型來創建函數 isAdult,該函數接受一個 User 類型的參數,並返回 boolean。在此之後,我們創建 justine,我們的示例數據,可用於調用先前定義的函數。最後,我們創建一個新變量,包含有關 justine 是否為成年人的信息。

關於此示例,您應該知道的還有其他事項。首先,如果我們不遵守已聲明的類型,TypeScript 將警告我們有錯誤並防止誤用。其次,不是所有的東西都必須明確地進行類型聲明 - TypeScript 非常聰明,可以為我們推斷類型。例如,即使我們沒有明確地為變量 isJustineAnAdult 進行類型聲明,它也將是 boolean 類型,或者即使我們沒有將此變量聲明為 User 類型,justine 仍將是我們函數的有效參數。

好的,我們有一些 TypeScript 代碼。現在該如何運行它呢?

首先要做的是在我們的項目中安裝 TypeScript。

npm i -D typescript

現在我們可以使用終端中的 tsc 命令將其編譯為 JavaScript。讓我們來做吧!

假設我們的文件名為 example.ts,該命令將如下所示

npx tsc example.ts

npx 在這裡代表 Node Package Execute。這個工具允許我們在不全局安裝的情況下運行 TypeScript 的編譯器。

tsc 是 TypeScript 編譯器,它將接受我們的 TypeScript 代碼並將其編譯為 JavaScript。此命令將生成一個名為 example.js 的新文件,我們可以使用 Node.js 執行它。現在我們知道如何編譯和運行 TypeScript 代碼,讓我們看看 TypeScript 防止錯誤的能力如何發揮!

這就是我們將修改代碼的方式

type User = {
  name: string;
  age: number;
};

function isAdult(user: User): boolean {
  return user.age >= 18;
}

const justine: User = {
  name: 'Justine',
  age: 'Secret!',
};

const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");

這就是 TypeScript 對此的看法

example.ts:12:3 - error TS2322: Type 'string' is not assignable to type 'number'.

12   age: "Secret!",
     ~~~

  example.ts:3:3
    3   age: number;
        ~~~
    The expected type comes from property 'age' which is declared here on type 'User'

example.ts:15:7 - error TS2322: Type 'boolean' is not assignable to type 'string'.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
         ~~~~~~~~~~~~~~~~

example.ts:15:51 - error TS2554: Expected 1 arguments, but got 2.

15 const isJustineAnAdult: string = isAdult(justine, "I shouldn't be here!");
                                                     ~~~~~~~~~~~~~~~~~~~~~~


Found 3 errors.

正如您所看到的,TypeScript 成功防止我們發佈可能會意外工作的代碼。太棒了!

關於 TypeScript 的更多資訊

TypeScript 提供了許多其他很棒的機制,如接口、類、實用工具類型等。此外,在更大的項目中,您可以在單獨的文件中聲明您的 TypeScript 編譯器配置,並且可以精確地調整它的工作方式、嚴格程度以及例如存儲已編譯文件的位置。您可以在官方 TypeScript 文檔中閱讀有關所有這些令人驚嘆的功能的更多信息。

有一些 TypeScript 的其他好處值得一提,它可以逐步採用,有助於使代碼更易讀和理解,並且允許開發人員在為舊版本的 Node.js 發佈代碼時使用現代語言功能。

Node.js 中的 TypeScript

TypeScript 在 Node.js 領域中得到了很好的確立,許多公司、開源項目、工具和框架都在使用它。一些使用 TypeScript 的值得注意的開源項目示例包括

  • NestJS - 強大且功能豐富的框架,使創建可擴展和良好架構的系統變得輕鬆愉悅
  • TypeORM - 受其他語言中知名工具如 Hibernate、Doctrine 或 Entity Framework 影響的優秀 ORM
  • Prisma - 具有聲明式數據模型、生成遷移和完全類型安全的數據庫查詢的下一代 ORM
  • RxJS - 廣泛使用的用於反應式編程的庫
  • AdonisJS - 帶有 Node.js 的完整功能 Web 框架
  • FoalTs - 優雅的 Node.js 框架

還有許多許多優秀的專案... 也許包括您的下一個專案!