使用 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 框架
還有許多許多優秀的專案... 也許包括您的下一個專案!