目錄[隱藏][顯示]
- 1. TypeScript 到底是什麼?它與 JavaScript 有何不同?
- 2. TypeScript 有哪些值得注意的特性?
- 3. 使用 TypeScript 有哪些好處?
- 4. 使用 TypeScript 有哪些缺點?
- 5. TypeScript 的組件到底是什麼?
- 6. 你能解釋一下 TypeScript 中的接口嗎?
- 7. TypeScript 中的變量是什麼以及如何以各種方式聲明它們?
- 8. 如何使用接口的子集生成新類型?
- 9. “任何”類型是什麼意思?我什麼時候應該使用它們?
- 10. TypeScript 為什麼是一種具有可選靜態類型語法的語言?
- 11. 在 TypeScript 中,模塊是什麼意思?
- 12. TypeScript 中的“枚舉”如何發揮作用?
- 13. 內部模塊與外部模塊有何區別?
- 14. TypeScript 的匿名函數是什麼意思?
- 15. 在 TypeScript 中,什麼是命名空間以及如何聲明命名空間?
- 16. TypeScript 支持哪些訪問修飾符?
- 17. TypeScript 允許函數重載嗎?
- 18. TypeScript 如何允許函數中使用可選參數?
- 19. var、let 和 const 有何不同?
- 20. 在 TypeScript 中,描述裝飾器?
- 21. 在 TypeScript 中,Mixin 是什麼意思?
- 22. TypeScript 中的類型別名到底是什麼?
- 23. 術語“範圍變量”是什麼意思?
- 24. noImplicitAny 到底有什麼用?
- 25. 並集和交集類型有何不同?
- 26. 如何定義 TypeScript Declare 關鍵字?
- 27. 在 TypeScript 中,什麼是泛型?
- 28. JSX 在 TypeScript 中意味著什麼?
- 29.什麼是 TypeScript Ambients 以及何時應該使用它們?
- 30. TypeScript 中的抽像類是什麼意思?
- 31. TypeScript Map 文件到底是什麼?
- 32. 在 TypeScript 中,什麼是類型斷言?
- 結論
Microsoft 開發並繼續支持 TypeScript 編程語言。 通過添加靜態類型作為選項,它是 JavaScript 的語法超集。
大型應用程序開發語言TypeScript編譯JavaScript。 由於 TypeScript 是 JavaScript 的超集,因此用 JavaScript 編寫的程序在 TypeScript 中也有效。
以下是最典型的 TypeScript 開發人員面試問題和回答的完整列表,以防您參加面試。
1. TypeScript 到底是什麼?它與 JavaScript 有何不同?
TypeScript 是 JavaScript 的超集,可編譯為標準 JavaScript。 從概念的角度來看,TypeScript 和 JavaScript 類似於 SASS 和 CSS。
換句話說,TypeScript 是具有更多功能的 ES6 JavaScript。 JavaScript 是一種更類似於 Python 的腳本語言,而 TypeScript 是一種與 Java 和 C# 類似的面向對象的靜態類型語言。
類和接口都是 TypeScript 面向對象設計的一部分,而類型推斷由於其靜態類型而成為眾多可用工具之一。
JavaScript 編寫在擴展名為 .js 的文件中,而 TypeScript 編寫在擴展名為 .ts 的文件中。
與 JavaScript 相反,TypeScript 代碼不能直接在瀏覽器或任何其他平台上運行,並且不被瀏覽器理解。 然後,目標平台將運行使用 TypeScript 的轉譯器從 .ts 文件生成的純 JavaScript。
2. TypeScript 有哪些值得注意的特性?
- 靜態類型是 TypeScript 的一項功能,可在編譯期間幫助進行類型檢查。 因此,即使不執行腳本,您也可以在編寫代碼時檢測到代碼中的錯誤。
- 可以使用 TypeScript 更改 DOM 以添加或刪除項目。
- 任何操作系統,包括 Windows、macOS 和 Linux,都可以安裝 TypeScript 編譯器。
- 類、接口和模塊是 TypeScript 提供的一些功能。 因此,它可以為客戶端和服務器端開發創建面向對象的代碼。
- ECMAScript 2015 (ES 6, 7) 的大部分功能已經包含在 TypeScript 中,包括類、接口、箭頭函數等。
- 如果您使用 JavaScript 的動態類型,TypeScript 還支持可選的靜態類型。
3. 使用 TypeScript 有哪些好處?
- 任何 JavaScript 引擎或瀏覽器都可以執行 TypeScript,因為它快速、易於學習且運行速度快。
- 它與 JavaScript 具有相同的語法和語義。
- 這有利於後端開發人員更快地編寫前端代碼。
- 它結合了 ES6 和 ES7 功能,可以 JavaScript 中的函數 ES5 引擎,例如 Node.js。
- 現有的 JavaScript 庫(如 Jquery、D3.js 等)通過定義文件支持,該文件的擴展名為 .d.ts。
- 已存在的 JavaScript 腳本可以調用 TypeScript 代碼。 它還與當前的 JavaScript 框架和庫無縫集成。
4. 使用 TypeScript 有哪些缺點?
- 使用 TypeScript 進行編碼需要漫長的編譯過程。
- 它不支持抽像類。
- 類型定義文件的質量是一個問題。
- 任何第三方庫都必須有定義文件才能使用。
- 如果我們想在瀏覽器中運行 TypeScript 應用程序,則需要執行編譯步驟將 TypeScript 轉換為 JavaScript。
- JavaScript 已被 Web 開發人員使用多年,而 TypeScript 並沒有提供任何新內容。
5. TypeScript 的組件到底是什麼?
在 TypeScript 中,組件主要分為三類,包括:
- 語言:它包括類型、關鍵字和語法的註釋。
- TypeScript 編譯器:TypeScript 指令由該編譯器 (tsc) 翻譯為 JavaScript。
- TypeScript 語言服務:語言服務提供類似編輯器的應用程序作為基本編譯器進程之上的第二層。 語言服務支持通用編輯操作的標準集。
6. 你能解釋一下 TypeScript 中的接口嗎?
TypeScript 使用接口來指定實體的語法。 換句話說,可以使用接口來描述對像或項目數組等數據形式。 Interface 關鍵字、接口名稱及其定義用於聲明接口。 讓我們檢查一下用戶對象的基本接口。
然後可以使用接口設置變量的類型(類似於將基本類型分配給變量的方式)。 然後,用戶類型的變量將滿足接口的屬性。
您的 TypeScript 項目受益於接口,因為它們提供了一致性。 此外,接口通過增強 IDE 自動完成功能並保證向構造函數和方法提供正確的值來增強項目的工具。
7. TypeScript 中的變量是什麼以及如何以各種方式聲明它們?
變量是專門指定的內存區域,用於保存值。 在 TypeScript 中聲明變量時,冒號 (:) 位於變量名稱後面,後跟類型。 我們使用 var 關鍵字聲明變量,就像在 JavaScript 中一樣。
在 Typescript 中聲明變量時必須遵守某些準則:
- 名稱不能以數字開頭。
- 變量名必須包含字母或數字。
- 美元符號 ($) 和下劃線 (_) 是此字段中唯一允許使用的特殊字符。
8. 如何使用接口的子集生成新類型?
通過提供現有類型或接口並選擇要從新類型中排除的鍵,您可以使用實用程序類型省略在 TypeScript 中創建新類型。
下面的示例演示如何構造一個名為 UserPreview 的新類型,該類型基於用戶界面但不包括電子郵件屬性。
9. “任何”類型是什麼意思?我什麼時候應該使用它們?
有時你需要在變量中保存一個值,但你事先不確定變量的類型。 例如,該值可能源自用戶輸入或 API 請求。 您可以使用“any”類型為變量類型賦予任何類型的值。
當未顯式指定變量的類型並且編譯器無法從上下文中確定該變量的類型時,TypeScript 會認為該變量的類型為 any。
10. TypeScript 為什麼是一種具有可選靜態類型語法的語言?
可以指示編譯器忽略 TypeScript 中變量的類型,因為它是可選的靜態類型。 任何數據類型都可用於為變量分配任何類型的值。 編譯時,TypeScript 不會提供任何錯誤檢查。
11. 在 TypeScript 中,模塊是什麼意思?
使用模塊將相關變量、函數、類、接口等組合在一起是有效的。 它可以使用,但不能在全局範圍內使用,只能在其自己的範圍內使用。
本質上,模塊定義的變量、函數、類和接口不能從模塊外部直接訪問。
export 關鍵字可用於構建模塊,而 import 關鍵字可用於將一個模塊包含在另一個模塊中。
12. TypeScript 中的“枚舉”如何發揮作用?
定義命名常量集合的一種方法是使用枚舉或枚舉類型。 這些數據結構具有固定長度和固定值的集合。
當在 TypeScript 中表示給定值的替代集合時,經常使用枚舉來描述使用一組鍵/值對的可能性。
讓我們看一下用於提供各種用戶類型的枚舉的示例。
編譯後,TypeScript 在內部將枚舉轉換為常規 JavaScript 對象。 因此,使用枚舉優於使用多個單獨的 const 變量。
由於枚舉提供的分組,您的代碼是類型安全的並且更易於理解。
13. 內部模塊與外部模塊有何區別?
內部模塊:
- 內部模塊是 Typescript 之前迭代的一個功能。
- 內部模塊的名稱和主體是使用 ModuleDeclarations 定義的。
- 這些是本地或導出的其他模塊的成員。
- 類、接口、函數和變量在內部模塊中組合在一起,可以導出到另一個模塊中。
外部模塊:
- 在最新版本中,外部模塊被稱為模塊。
- 使用稱為外部模塊的單獨源文件來創建它們,每個模塊至少有一個導入或導出聲明。
- 在最新版本中,外部模塊被稱為模塊。
- 可以使用外部模塊隱藏模塊定義的內部語句,只留下連接到定義的變量的方法和參數可見。
14. TypeScript 的匿名函數是什麼意思?
分類為匿名的函數缺少函數名稱作為標識符。 這些例程在運行時動態定義。 與常規函數一樣,匿名函數可以接受輸入並產生結果。
匿名函數一旦創建通常就無法訪問。 變量可以分配給匿名函數。
15. 在 TypeScript 中,什麼是命名空間以及如何聲明命名空間?
命名空間對功能進行邏輯分組。 它們在內部保留了打字稿遺留代碼。 它包含具有特定聯繫的特徵和事物。
命名空間的另一個名稱是內部模塊。 接口、類、函數和變量都可以包含在命名空間中,以提供連接功能的集合。
16. TypeScript 支持哪些訪問修飾符?
以下是如何使用 TypeScript 中的 public、private 和 protected 訪問修飾符來控制類成員的可訪問性的示例:
- 公共 – 該類的每個成員、其所有後代類以及該類的每個實例都可以訪問。
- 受保護——類的每個成員及其所有子類都可以訪問它們。 但是,類實例無法訪問。
- 私人訪問僅限班級成員。
由於 JavaScript 很方便,如果沒有給出訪問修飾符,則假定它是公共的。
17. TypeScript 允許函數重載嗎?
是的,TypeScript 支持函數重載。 但現在這樣做很奇怪。 因此,當使用 TypeScript 重載時,只有一種具有多種簽名的實現。
第二個簽名包含一個文本類型的參數,而第一個簽名只有一個數字類型的參數。 第三個函數包含 any 類型的參數,包含實際的實現。
然後,該實現確定所提供參數的類型,並根據該確定運行單獨的代碼部分。
18. TypeScript 如何允許函數中使用可選參數?
與 JavaScript 相反,如果您嘗試調用函數而不指定函數簽名中指定的精確參數數量和類型,TypeScript 編譯器將引發錯誤。
您可以通過使用問號符號(“?”)來使用可選參數來解決此問題。 可見,可選參數可以通過添加“?”來表示。 那些可能會或可能不會收到價值的人。
19. var、let 和 const 有何不同?
TypeScript 提供了三種不同的變量聲明方法,每種方法都有一個建議的應用程序。
是:使用 JavaScript 的 var 變量的行為和作用域準則聲明全局或函數作用域的變量。 變量在聲明時不需要設置其值。
讓: 聲明一個局部作用域的塊變量。 讓變量在聲明時不需要設置變量的值。 術語“塊範圍局部變量”是指只能從包含它的塊內部訪問的變量,例如函數、if/else 塊或循環。 與 var 不同,let 變量在聲明之前不能被讀取或寫入。
常量:聲明塊作用域常量的值,該常量在初始化後無法更改。 const 變量需要在聲明之前進行初始化。 對於在整個存在期間保持不變的變量來說,這是最佳的。
20. 在 TypeScript 中,描述裝飾器?
訪問器、屬性、參數、類、函數或裝飾器都可以以特定方式聲明為裝飾器。 裝飾器是帶有@表達式前綴的函數,將在運行時調用有關裝飾聲明的詳細信息。
表達式必須計算函數才能使裝飾器工作。
TypeScript 裝飾器提供了以聲明方式向當前代碼添加註釋和信息的目標。
在我們的 tsconfig.json 文件或命令行中,您必須激活experimentalDecorators編譯器選項才能啟用對裝飾器的實驗性支持:
21. 在 TypeScript 中,Mixin 是什麼意思?
Mixin 是一種從 Javascript 中的可重用部分創建類並混合部分類以創建更複雜的完整類的技術。
這個概念很簡單:函數 B 接受類 A 並返回一個添加了其功能的新類,而不是類 A 擴展類 B 以獲得其功能。 在這種情況下,函數 B 是一個 mixin。
22. TypeScript 中的類型別名到底是什麼?
類型別名更改類型的名稱。 類型別名與接口一樣,可用於命名基元、聯合、元組以及任何其他必須手動定義的類型。
別名不會創建新類型; 相反,它更改現有類型的名稱。 給原語起別名並不實際,儘管它對於文檔來說可能是有益的。
類型別名與接口一樣,可以是通用的; 您所要做的就是添加類型參數並在別名聲明的右側使用它們。
23. 術語“範圍變量”是什麼意思?
JavaScript 支持局部和全局範圍變量。 作用域是對象、變量和函數的集合。
在兩個作用域中聲明變量的示例是:
- 具有局部作用域的變量 - 它用作函數內使用的函數對象。
- 具有全局範圍的變量 - 該窗口對象可以在函數內部和外部使用
24. noImplicitAny 到底有什麼用?
TypeScript 編譯器對項目隱式 any 類型的處理由 TypeScript 項目的 tsconfig.json 配置文件中的 noImplicitAny 屬性更改。
noImplicitAny 標誌可以設置為 true 或 false,並且在初始化後始終可以更改。 鑑於每個項目都是獨一無二的,這個數字應該是多少,沒有正確或錯誤的答案。
了解標誌的打開和關閉狀態之間的區別可以幫助您選擇用於標誌的設置。
如果 noImplicitAny 標誌設置為 false(默認值),則編譯器不會根據變量的使用方式來確定變量的類型。 編譯器默認將類型設置為 any。
但是,如果 noImplicitAny 選項設置為 true,編譯器將努力推斷類型,如果無法這樣做,則會引發編譯時錯誤。
25. 並集和交集類型有何不同?
並集和交集類型允許您組合和混合現有類型,而不是從頭開始生成新類型。 並集和交集都具有獨特的品質,使它們非常適合某些用例。
可以是多種類型之一的類型稱為聯合類型。 將在新類型中使用的類型列表使用 | 進行劃分。 聯合類型中的(豎線)符號。
我們來看一個例子:
另一方面,交集被定義為一種將多種類型合併為一種類型,集成每種類型的所有特徵以形成一種新類型。 將要合併的種類列表使用 & 符號劃分為交叉點。
讓我們看一個例子:
26. 如何定義 TypeScript Declare 關鍵字?
JavaScript 庫或框架中沒有 TypeScript 聲明文件。 但是,您必須使用聲明關鍵字才能在 TypeScript 文件中使用它們而不會遇到任何編譯錯誤。
當您希望指定一個可能已存在於其他地方的變量時,您可以在環境聲明和方法中使用declare關鍵字。
27. 在 TypeScript 中,什麼是泛型?
名為 TypeScript Generics 的工具提供了一種生成可重用部件的方法。 它不是只處理一種形式的數據,而是可以開發可以處理一系列數據類型的組件。
此外,它還提供類型安全性,而不會犧牲效率或生產率。 借助泛型,我們可以構建泛型類、泛型函數、泛型方法和泛型接口。
泛型是高度類型化的集合,因為類型參數寫在左括號 () 和右括號 (>) 之間。 它使用一種稱為 T 的獨特類型變量,它代表類型。
28. JSX 在 TypeScript 中意味著什麼?
JSX 是一種合法的 JavaScript,可以從可嵌入的類似 XML 的語法轉換而來。 JSX 與 React 框架一起流行起來。
TypeScript 支持直接編譯、類型驗證以及將 JSX 嵌入到 JavaScript 中。 如果您想使用它,您必須為文件提供 .tsx 擴展名並激活 JSX 選項。
29.什麼是 TypeScript Ambients 以及何時應該使用它們?
編譯器通過環境聲明獲知位於其他地方的真實源代碼。
如果我們嘗試在運行時使用這些源代碼但它們不存在,它將在沒有任何事先通知的情況下中斷。 類似文檔的文件是環境聲明文件。
如果源代碼發生變化,則必須更新文檔,如果不更改環境聲明文件,則會導致編譯器問題。
此外,它使我們能夠利用已經廣泛使用的知名 JavaScript 庫,例如 jQuery、AngularJS、NodeJS 等。
30. TypeScript 中的抽像類是什麼意思?
抽像類定義對象的契約,但不允許直接對象實例化。 然而,抽像類也可以提供其成員的實現信息。
抽像類中可以找到一個或多個抽象成員。 然後,超類的抽象成員必須具有由擴展抽像類的任何類提供的實現。
讓我們看一下抽像類的 TypeScript 示例,以及不同的類如何擴展它。 儘管下面示例中的 Car 和 Bike 類都擴展了 Vehicle 類,但它們都以獨特的方式實現了drive() 函數。
31. TypeScript Map 文件到底是什麼?
稱為 TypeScript Map 文件的源映射文件包含有關我們原始文件的數據。 源映射文件或 .map 文件允許工具在輸出的 JavaScript 代碼和生成它的 TypeScript 源文件之間進行映射。
此外,這些文件可以被調試器使用,使我們能夠調試 TypeScript 文件而不是 JavaScript 文件。
32. 在 TypeScript 中,什麼是類型斷言?
雖然類型斷言的功能與其他語言(如 C# 和 Java)中的類型轉換類似,但它不執行類型驗證或數據重新排列。
雖然類型斷言對運行時沒有影響,但類型轉換提供了這種支持。 另一方面,類型斷言僅由編譯器使用,並為我們希望如何檢查代碼提供指導。
結論
總之,我們希望這些 TypeScript 面試問題對您有所幫助,無論您是準備面試的開發人員還是試圖尋找最佳申請人的招聘經理。
請記住,招聘過程不僅僅涉及技術專業知識。 為了確保您找到(或找到合適的申請人)這份工作,過去的經驗和軟技能同樣重要。
很多 TypeScript 面試問題都是開放式的,沒有單一的正確答案,所以請記住這一點。
面試官對你的回答背後的理由感興趣。
隨時準備好接受後續詢問,解釋您如何得出答案。 描述你的思考過程。
發表評論