TypeScript入門實戰筆記 -- 01 如何快速搭建 TypeScript 學習開發環境?

🍍IDE for TypeScript

在搭建 TypeScript 環境之前,我們需要先認識幾款適合 TypeScript 的 IDE。只有這樣,在開發時我們才能根據實際情況選擇合適的 IDE 進行安裝,從而提升工作效率。

VS Code

Visual Studio Code(VS Code),此款開源編輯器由微軟開發并維護,深受開發者的歡迎。首推VS Code的原因,可以歸結為以下四點:

  1. 在傳統語法高亮、自動補全功能的基礎上拓展了基于變量類型、函數定義,以及引入模塊的智能補全;
  1. 支持在編輯器上直接運行和調試應用;
  1. 內置了 Git Comands,能大幅提升使用 Git 及其他 SCM 管理工具的協同開發效率;
  1. 基于 Electron 開發,具備超強的擴展性和定制性。

下面請你點擊這里打開官方網站,并下載安裝包進行安裝。安裝好后,我們點擊啟動圖標即可啟動 VS Code。

在 Mac 電腦上,如果你習慣使用命令行,可以將 VS Code bin 目錄添加到環境變量 PATH 中,以便更方便地喚起它,如下代碼所示:

export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"

然后,在 Mac 命令行工具中,我們使用 Vim 編輯“source ~/.bash_profile”即可讓配置的環境變量生效。

source ~/.bash_profile

Vim 保存退出后,輸入“code 應用路徑”(如下所示),我們就可以快速打開和編輯指定路徑下的應用了。

 code 應用路徑

因為 VS Code 中內置了特定版本的 TypeScript 語言服務,所以它天然支持 TypeScript 語法解析和類型檢測,且這個內置的服務與手動安裝的 TypeScript 完全隔離。因此,VS Code 支持在內置和手動安裝版本之間動態切換語言服務,從而實現對不同版本的 TypeScript 的支持

如果當前應用目錄中安裝了與內置服務不同版本的 TypeScript,我們就可以點擊 VS Code 底部工具欄的版本號信息,從而實現 “use VS Code's Version” 和 “use Workspace's Version” 兩者之間的隨意切換。

設置當前窗口使用的 TypeScript 版本的具體操作,如下圖所示:

我們也可以在當前應用目錄下的 “.VS Code/settings.json” 內添加命令(如下所示)配置 VS Code 默認使用應用目錄下安裝的 TypeScript 版本,以便提供語法解析和類型檢測服務。

{"typescript.tsdk": "node_modules/typescript/lib"
}

在實際編寫 TypeScript 代碼時,我們可以使用“Shift + Command + M”快捷鍵打開問題面板查看所有的類型錯誤信息概覽,如下圖所示:

查看所有的類型錯誤信息概覽圖

這里請注意:不同操作系統、不同 VS Code 版本的默認快捷鍵可能不一致,我們可以點擊菜單欄中的“視圖(View)| 問題(Problems)” 查看具體快捷鍵。

除了類型定義之外,TypeScript 語言服務還能將使用 JSDoc 語法編寫的結構化注釋信息提供給 VS Code,而這些信息將在對應的變量或者類型中通過 hover 展示出來,極大地提升了代碼的可讀性和開發效率,如下圖所示:

對于 VS Code 這款 IDE 而言,它比較大眾化、開放化,已經能滿足我們絕大多數的功能訴求。即便有些需求不能滿足,我們也可以通過豐富的插件市場進行實現。

WebStorm

另外一款值得推薦的 TypeScript 開發利器是 WebStorm,它具備開箱即用、無須做任何針對性的配置即可開發、執行和調試 TypeScript 源碼這兩大優勢。

下面請點擊這里打開官方網站,并下載安裝包進行安裝。

WebStorm 也是基于標準的 TypeScript Language Service 來支持 TypeScript 的各種特性,與其他 IDE 在類型檢測結果、自動完成提示上沒有任何差異。

比如,它同樣可以準確地進行代碼自動補全,如下圖所示:

代碼自動補全效果圖

再比如,它同樣支持 hover 提示類型及 JSDoc 注釋,如下圖所示:

提示類型及注釋效果圖

因為 WebStorm 畢竟是一款商業化(收錢的)軟件,所以它還集成了很多強大的 TypeScript 開發功能,具體內容你可點擊這里查看。

WebStorm 與 VS Code 相比,最大的優勢在于開箱即用,這點可謂是選擇困難癥患者的福音。不過,它對電腦配置要求較高,對于 Mac 用戶來說比較適合。

Playground

官方也提供了一個在線開發 TypeScript 的云環境——Playground。

基于它,我們無須在本地安裝環境,只需要一個瀏覽器即可隨時學習和編寫 TypeScript,同時還可以方便地選擇 TypeScript 版本、配置 tsconfig,并對 TypeScript 實時靜態類型檢測、轉譯輸出 JavaScript 和在線執行。

而且在體驗上,它也一點兒不遜色于任何本地的 IDE,對于剛剛學習 TypeScript 的我們來說,算是一個不錯的選擇。

  • 點擊查看中文版地址(如下圖所示)
  • 點擊查看英文版地址

中文版的 TypeScript Playground 效果圖

Playground 還為我們提供了分享的功能,比如我們可以把學習成果、遇到的難點通過 URL 的形式分享給他人。

不過,在實際開發業務應用中,我們還是極力推薦使用 VS Code,畢竟它是微軟的“親兒子”,與 TypeScript 集成得更好,擁有極其完善的插件體系,更重要的是還完全免費。

基于 VS Code安裝 TypeScript

接下來,我們繼續了解如何基于 VS Code 完善 TypeScript 開發、轉譯環境。

因為 VS Code 只集成了 TypeScript 語言服務,不包含轉譯器,所以我們還需要單獨安裝 TypeScript。

為了方便快速完成一個入門小示例,這里我們推薦通過命令行工具使用 npm 全局安裝 TypeScript。

具體操作:使用“Ctrl + `”快捷鍵打開 VS Code 內置命令行工具,然后輸入如下所示代碼:

npm i -g typescript

注意:使用示例的開發環境都是基于 TypeScript 3.9.* 版本,所以在嘗試操作時也安裝相同的 TypeScript 版本(比如 3.9.2、3.9.3……3.9.7),如下代碼所示:

npm i -g typescript@3.9.*

TypeScript 安裝完成后,我們輸入如下所示命令即可查看當前安裝的 TypeScript 版本。

tsc -v

然后,我們可能會看到輸出了我們安裝的版本信息:

Version 3.9.10

我們也可以通過安裝在 Terminal 命令行中直接支持運行 TypeScript 代碼(Node.js 側代碼)的 ts-node 來獲得較好的開發體驗。

通過 npm 全局安裝 ts-node 的操作如下代碼所示:

npm i -g ts-node

如果你是 Mac 或者 Linux 用戶,就極有可能在 npm i -g typescript 中遭遇 “EACCES: permission denied” 錯誤,此時我們可以通過以下 4 種辦法進行解決:

  • 使用 nvm 重新安裝 npm
  • 修改 npm 默認安裝目錄
  • 執行 sudo npm i -g xx
  • 執行 sudo chown -R [user]:[user] /usr/local/lib/node_modules

你可以點擊這里了解更多相關建議。

最后,我們創建了一個 ts-example 的應用目錄用來記錄練習例子,然后使用 VS Code 即可打開這個應用。

編寫 Hello World

我們可以在練習目錄下輸入“tsc --init”命令快速創建一個 tsconfig.json 文件,或者在 VS Code 應用窗口新建一個空的 tsconfg.json配置 TypeScript 的行為。

tsc --init

為了讓 TypeScript 的行為更加嚴格、簡單易懂,建議在 tsconfig.json 中開啟如下所示設置,該設置將決定了 VS Code 語言服務如何對當前應用下的 TypeScript 代碼進行類型檢測。

"compilerOptions": {/* Strict Type-Checking Options */"strict": true,                           /* Enable all strict type-checking options. */"noImplicitAny": true,                    /* Raise error on expressions and declarations with an implied 'any' type. */"strictNullChecks": true,                 /* Enable strict null checks. */"strictFunctionTypes": true,              /* Enable strict checking of function types. */"strictBindCallApply": true,              /* Enable strict 'bind', 'call', and 'apply' methods on functions. */"strictPropertyInitialization": true,     /* Enable strict checking of property initialization in classes. */"noImplicitThis": true,                   /* Raise error on 'this' expressions with an implied 'any' type. */"alwaysStrict": false                     /* Parse in strict mode and emit "use strict" for each source file. */
}

然后,我們輸入如下所示代碼即可新建一個 HelloWorld.ts 文件:

function say(word: string) {console.log(word)
}say('hello word')

在以上代碼中,word 函數參數后邊多出來的 “: string” 注解直觀地告訴我們,這個變量的類型就是 string。如果你之前使用過其他強類型的語言(比如 Java),就能快速理解 TypeScript 語法。

.ts 文件創建完成后,我們就可以使用 tsc(TypeScript Compiler) 命令將 .ts 文件轉譯為 .js 文件。

注意:指定轉譯的目標文件后,tsc 將忽略當前應用路徑下的 tsconfig.json 配置,因此我們需要通過顯式設定如下所示的參數,讓 tsc 以嚴格模式檢測并轉譯 TypeScript 代碼。

tsc HelloWorld.ts --strict --alwaysStrict false

同時,我們可以給 tsc 設定一個 watch 參數監聽文件內容變更,實時進行類型檢測和代碼轉譯,如下代碼所示:

tsc HelloWorld.ts --strict --alwaysStrict false --watch

tsc 轉譯監聽模式效果圖

我們也可以直接使用 ts-node 運行 HelloWorld.ts,如下代碼所示:

ts-node HelloWorld.ts

運行成功后,ts-node 就會輸出如下所示內容:

hello word

當然,我們也可以喚起“直接運行”(本質上是先自動進行轉譯,再運行)TypeScript 的 ts-node 命令行來編寫代碼,這就跟我們在 Node.js 命令行或者瀏覽器中調試工具一樣。

然后,我們再回車立即執行如下所示代碼:

function say(word: string) {console.log(word)
}say()

這里請注意:TypeScript 的類型注解旨在約束函數或者變量,在上面的例子中,我們就是通過約束一個示例函數來接收一個字符串類型(string)的參數。

在接下來演示的例子中,我們將故意犯一個低級錯誤,先傳遞一個數字類型的參數給如下所示函數:

function say(word: string) {console.log(word)
}say(1)

然后 VS Code 會標紅這個錯誤,并在問題(Problems)面板中顯示錯誤信息,如下圖所示:

VS Code 問題面板顯示效果圖

最后,通過 tsc 轉譯或者 ts-node 運行這個示例,我們會看到如下所示的報錯信息。

'number''string'

error TS2345: Argument of type  is not assignable to parameter of type .

這是因為函數 say 限定了形參的類型是 string,而我們調用 say 時傳遞的實參類型是 number,所以轉譯階段拋出了這個錯誤。

小結

VS Code 讓我們獲得一種較為理想的開發體驗,不必等到轉譯階段,在編碼時就能快速檢測、拋出類型錯誤,極大地提升了 TypeScript 開發體驗和效率。

特別需要注意的是,VS Code 默認使用自身內置的 TypeScript 語言服務版本,而在應用構建過程中,構建工具使用的卻是應用路徑下 node_modules/typescript 里的 TypeScript 版本。如果兩個版本之間存在不兼容的特性,就會造成開發階段和構建階段靜態類型檢測結論不一致的情況,因此,我們務必將 VS Code 語言服務配置成使用當前工作區的 TypeScript 版本。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213270.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

public static final

常量對象中聲明并賦值的正確寫法一&#xff1a; public class RoleConstant {public static final List<String> PROBLEM_VIEW_ALL_DATA new ArrayList<String>() {{add("角色1");add("角色2");add("角色3");}};}常量對象中聲明并…

力扣101.對稱二叉樹

目錄 1.解題思路2.代碼實現 1.解題思路 由于題中的接口只給了一個參數&#xff0c;因此如果我們使用題中給的接口做出遞歸就會很難&#xff0c;因此我們可以再給一個有著兩個參數的接口&#xff0c;這樣&#xff0c;對于左右子樹的判斷也會變得更加便利&#xff0c;然后&#…

設計模式篇---代理模式

文章目錄 概念結構實例靜態代理動態代理 總結 概念 代理模式&#xff1a;給某一個對象提供一個代理或占位符&#xff0c;并由代理對象來控制對原對象的訪問。 比如我們想從其他國家買東西&#xff0c;但我們無法直接聯系外國的商家&#xff0c;可以找代理商&#xff0c;讓他們…

dell r720遠程網絡安裝ubuntu20.04(無U盤)

登陸后界面&#xff0c;在主界面上&#xff0c;我們就可以看到各個硬件組件的狀態。在快速啟動任務欄中&#xff0c;可以對系統電源進行操作&#xff0c;如開機、關機等。安裝操作系統&#xff0c;在虛擬控制臺預覽處點擊>啟動 按照瀏覽器出現的提示確定安裝控件等&#x…

NSSCTF web刷題記錄7

文章目錄 [SDCTF 2022]CURL Up and Read [SDCTF 2022]CURL Up and Read 考點&#xff1a;SSRF 打開題目發現是curl命令&#xff0c;提示填入url 嘗試http://www.baidu.com&#xff0c;成功跳轉 將url的字符串拿去解碼&#xff0c;得到json格式數據 讀取下環境變量&#xff0c…

基礎寵物商店管理系統(Java)大一程序設計

一.開發環境 Windows 11 -- JDK 21 -- IDEA 2021.3.3 二.需求 三.代碼部分 //創建一個寵物類&#xff0c;被另外兩類繼承public class Pet {private String name;private int age;private String gender;private double cost0;//買進價格private double sellprice0;//賣出價…

【Spring】Spring統一功能處理

Spring統一功能處理 攔截器攔截器什么是攔截器攔截器的基本使用定義攔截器注冊配置攔截器 攔截器詳解攔截器的攔截路徑配置攔截器實現原理初始化處理請求 適配器模式 統一數據返回格式統一數據返回格式快速入門 統一異常處理 攔截器 場景: 我們要對一個網站實現強制登陸的功能…

ChibiOS簡介2/5

ChibiOS簡介2/5 1. 源由2. ChibiOS基礎知識2/52.4 Chapter 4 - ChibiOS General Architecture2.4.1 The Big Picture&#xff08;總體框圖&#xff09;2.4.2 Embedded Components&#xff08;嵌入式組件&#xff09;2.4.3 Application Model&#xff08;應用模型&#xff09;2.…

爬蟲解析——Xpath的安裝及使用(五)

目錄 一、Xpath插件的安裝 二、安裝 lxml 三、Xpath解析文件 1.解析本地文件 &#xff08;1&#xff09;導入本地文件 &#xff08;2&#xff09;解析本地文件 2.服務器文件解析 &#xff08;1&#xff09;獲取網頁源碼 &#xff08;2&#xff09;解析服務器響應文件 …

力扣373. 查找和最小的 K 對數字

優先隊列 思路&#xff1a; 使用下標 (x, y) 標識數值對&#xff0c;x 為第一個數組的下標&#xff0c;y 為第二個數組的下標&#xff1b;所以 k 個數值對 x 的范圍屬于 [0, min(k, m)]&#xff0c;m 為第一個數組的 size&#xff1b;數值對 (x, y) &#xff0c;那么下一個比其…

TailwindCSS 如何處理RTL布局模式

背景 TikTok作為目前全世界最受歡迎的APP&#xff0c;需要考慮兼容全世界各個地區的本地化語言和閱讀習慣。其中對于阿拉伯語、波斯語等語言的閱讀書寫習慣是從右向左的&#xff0c;在前端有一個專有名字RTL模式&#xff0c;即Right-to-Left。 其中以阿拉伯語作為第一語言的人…

C# 獲取windows 系統開關機時間

關機時間&#xff0c;引用&#xff1a;https://www.coder.work/article/1589448 public static DateTime GetLastSystemShutdown() { string sKey "System\CurrentControlSet\Control\Windows"; Microsoft.Win32.RegistryKey key …

建立個人學習觀|地鐵上的自習室

作者&#xff1a;向知 如果大家有機會來北京&#xff0c;可以來看看工作日早上八九點鐘&#xff0c;15 號線從那座叫“順義”的城市通向“望京”的地鐵&#xff0c;你在那上面&#xff0c;能看到明明白白的&#xff0c;人們奔向夢想的模樣。 一、地鐵上的自習室 我在來北京之前…

華為數據之道學習筆記】3-5 規則數據治理

在業務規則管理方面&#xff0c;華為經常面對“各種業務場景業務規則不同&#xff0c;記不住&#xff0c;找不到”“大量規則在政策、流程等文件中承載&#xff0c;難以遵守”“各國規則均不同&#xff0c;IT能否一國一策、快速上線”等問題。 規則數據是結構化描述業務規則變量…

【算法集訓】基礎數據結構:三、鏈表

鏈表就是將所有數據都用一個鏈子串起來&#xff0c;其中鏈表也有多種形式&#xff0c;包含單向鏈表、雙向鏈表等&#xff1b; 現在畢竟還是基礎階段&#xff0c;就先學習單鏈表吧&#xff1b; 鏈表用頭結點head表示一整個鏈表&#xff0c;每個鏈表的節點包含當前節點的值val和下…

2024 年頂級的 Android 系統修復軟件與方法

您是否正在尋找可以修復 PC 上 Android 操作系統的工具&#xff1f;這是我們精選的最好的 Android 系統修復軟件&#xff01; Android 是世界著名的智能手機操作系統。全世界有數百萬人使用這個操作系統&#xff0c;這使得它安全可靠。然而&#xff0c;這仍然不能使它完美無缺…

048:利用vue-video-player播放m3u8

第048個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下&#xff0c;本專欄提供行之有效的源代碼示例和信息點介紹&#xff0c;做到靈活運用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安裝、引用&#xff0c;模板使…

普冉(PUYA)單片機開發筆記(6): 呼吸燈

概述 上一篇的實驗中&#xff0c;分別正確地配置了 TIM16 和 TIM1&#xff0c;TIM16 的中斷服務程序中每隔 500ms 翻轉板載 LED 一次&#xff1b;TIM1 的 CHANNEL_1 用于輸出一個固定占空比的 PWM 信號。這一次我們進一小步&#xff1a;使用 TIM16 的中斷設置 TIM1 CHANNEL_1 …

MyBatis進階之分頁和延遲加載

文章目錄 分頁1. RowBounds 分頁2. PageHelper 分頁3. PageInfo 對象屬性描述 延遲加載立即加載激進式延遲加載真-延遲加載 分頁 Mybatis 中實現分頁功能有 3 種途徑&#xff1a; RowBounds 分頁&#xff08;不建議使用&#xff09;Example 分頁&#xff08;簡單情況可用)Pag…

關于對向量檢索研究的一些學習資料整理

官方學習資料 主要是的學習資料是&#xff0c; 官方文檔 和官方博客。相關文章還是挺多 挺不錯的 他們更新也比較及時。有最新的東西 都會更新出來。es scdn官方博客 這里簡單列一些&#xff0c;還有一些其他的&#xff0c;大家自己感興趣去看。 什么是向量數據庫 Elasticse…