在當今的 Web 開發世界中,TypeScript 作為一種強大的工具為自己贏得了一席之地,它彌補了 JavaScript 的靈活性和靜態類型語言的魯棒性之間的差距(至少在 JavaScript 實現自己的類型之前)。
隨著技術格局的不斷發展,對 TypeScript 開發人員的需求也在不斷增加,技能要求也有所提升,但如何在面試中讓自己脫穎而出呢? 又或者你是一名面試官,你正在招聘 TypeScript開發人員,那如何確保您的候選人真正掌握 TypeScript?
然后,讓我們深入研究這個神奇的列表,其中,包含 30 個富有洞察力的 TypeScript 問題,范圍從基礎知識到更高級(分為 25 個針對中級角色,5 個針對更高級角色),確保你為下一個重大機會做好準備,祝你好運!
答案:TypeScript 是 JavaScript 的靜態類型超集,可以編譯為純 JavaScript。通過引入靜態類型,它允許開發人員在編譯時而不是運行時捕獲與類型相關的錯誤。
這可以減少錯誤,提高代碼可讀性,并通過增強的工具(例如自動完成和代碼導航)提供更高效的開發體驗。
答案:any 和unknown 都代表 TypeScript 中的任何值。
但有一個關鍵的區別:any 繞過了編譯器的類型檢查,本質上關閉了 TypeScript 對該變量的好處。
另一方面,unknown 保持類型檢查完整,確保在對變量執行操作之前斷言或縮小變量的類型。
答案:當我們有復雜的結構或重復的模式時,使用 type 關鍵字或接口定義的自定義類型是有益的。
例如,如果我們經常處理用戶數據,我們可以定義一次用戶類型或接口,然后在整個代碼庫中使用它,而不是在函數或類中重復定義用戶的形狀。
答案:聯合類型是一種表示一個值可以屬于多種類型之一的方式。例如,如果函數接受字符串和數字作為參數,則可以將其鍵入為 function example(arg: string | number)。這確保了功能的靈活性,同時,仍然保持類型安全。
答案:類型保護是運行時檢查,有助于縮小條件塊中變量的類型范圍。它們允許函數和方法根據輸入類型表現不同,而不會丟失類型信息。常見的類型保護包括使用 typeof、instanceof 和用戶定義的類型保護函數。
答案:TypeScript 中的元組是一個數組,其中元素的類型、順序和數量已知。例如,[string, number] 元組類型期望第一個元素是字符串,第二個元素是數字。這與常規數組形成對比,常規數組只知道元素的類型,而不知道順序或計數。
答案:在 TypeScript 中,? 符號用于將屬性標記為可選,例如 name?: string。當創建可能缺少值的結構或處理來自外部源的數據(其中某些字段可能不存在)時,這非常有用。
答:interface和type都可以定義對象形狀,但是它們有一些區別。interface更具可擴展性,允許聲明合并。type 提供了更多的多功能性,能夠表示并集、交集、元組等。雖然interface主要用于對象形狀,但 type 可以捕獲更廣泛的模式。
答:泛型允許創建靈活且可重用的組件,而無需犧牲類型安全性。它們充當未來類型的占位符,讓您可以編寫適用于多種類型的函數、類或接口。通過利用泛型,開發人員可以確保各種數據的類型安全,而無需編寫冗余代碼。
答案:readonly 關鍵字當作為變量或屬性的前綴時,可確保一旦設置其值,此后就無法修改。它對于確保在使用配置對象或在組件或函數之間傳遞數據等場景中的不變性特別有用。
答案:可區分聯合(也稱為標記聯合)是一種結合了聯合類型、文字類型和類型保護的模式。
當一個對象可以有多個形狀但共享一個公共屬性(通常是文字類型)時,可以使用它們,該屬性可用于縮小其確切形狀。
公共屬性(通常稱為“鑒別器”)允許我們在聯合內的類型之間安全地切換,從而更輕松地使用此類對象。
答案:TypeScript 支持繼承,就像 ES6 類一樣。使用extends關鍵字,一個類可以繼承另一個類的屬性和方法,提高代碼的可重用性并建立基類和派生類之間的關系。派生類還可以重寫繼承的方法或屬性,甚至用新的方法或屬性擴展對象結構。
答:裝飾器受到 Python 和 Java 等語言中注釋的啟發,提供了一種添加元數據或修改類定義、方法、屬性或方法參數的方法。
裝飾器使用 @ 前綴,可以影響或擴展它們裝飾的元素的行為,使其成為解決依賴注入、日志記錄甚至裝飾器等設計模式(模式,而不是功能本身)等問題的強大工具。
答案:與 JavaScript 一樣,== 是一個執行類型強制的松散相等運算符,這意味著如果不同類型的值在強制轉換后具有相同的值,則可以將它們視為相等。
另一方面, === 是一個嚴格的相等運算符,它檢查值和類型,使其在類型敏感的上下文中更安全、更可預測。
答案:在 TypeScript 中,您可以使用 readonly 修飾符后跟數組類型來定義只讀數組,例如 readonly string[]。
使用只讀數組可確保數組在創建后無法修改,這對于確保數據不變性特別有用,例如在函數或組件之間傳遞數據時。
答案:TypeScript 中的 never 類型表示永遠不會出現的值。它通常用于不返回值的函數 - 例如,那些總是拋出異常或具有無限循環的函數。它通過指示不應或無法到達某個代碼路徑來幫助確保類型安全。
答:要將 TypeScript 與 React 集成,可以使用 .tsx(TypeScript 與 JSX)文件。對于組件屬性和狀態,可以定義 TypeScript 接口或類型。
React.FC 泛型類型通常用于定義功能組件的類型,為 props、默認 props 和其他 React 特定功能提供強類型。
答案:TypeScript 中的命名空間是一種對相關代碼進行分組的方法,它們有助于避免全局命名空間中的命名沖突。
然而,隨著 ES6 模塊的興起,它提供了一種更加標準化和精細的方式來組織和封裝代碼,命名空間的相關性在許多現代 TypeScript 項目中已經減弱。
答案:TypeScript 中的類型斷言是一種告訴編譯器將變量視為某種類型的方法。這就像其他語言中的類型轉換。語法可以是<Type>變量或變量作為類型。當您比 TypeScript 的類型推斷系統更了解變量的類型時,例如在處理聯合類型或任何類型時,它會很有用。
答案:TypeScript 中的索引簽名允許對象具有某種類型的動態屬性。語法通常類似于 { [key: string]: ValueType }。當您事先不知道對象的鍵但知道其值的類型時,這是很有用的。
答案:TypeScript 支持可選鏈接 (?.),它允許讀取位于連接對象鏈深處的屬性值,而無需檢查鏈中的每個引用是否有效。如果任何引用為 null 或未定義,則表達式會與未定義的值短路。
空合并運算符 (??) 是一個邏輯運算符,當其左側操作數為空或未定義時返回其右側操作數,否則返回其左側操作數。這在您想要回退到默認值的情況下非常有用。
答案:映射類型允許通過轉換屬性在現有類型的基礎上創建新類型。它們遵循一種模式,您可以在其中迭代對象類型的屬性并生成新類型。常見用途包括使用 Partial<T> 使接口的所有屬性可選,或使用 Readonly<T> 使它們只讀。
答案:Mixin 是一種從可重用組件創建類的模式。在 TypeScript 中,mixin 可以通過創建接受類并使用新屬性或方法擴展它的函數來實現。然后,可以組合這些函數來裝飾或擴充類。此模式允許在 TypeScript 中實現類似多重繼承的行為。
答案:TypeScript 支持函數重載,即為單個函數聲明多個函數類型。然后,編譯器將根據函數調用的參數使用適當的類型。但是,TypeScript 不支持傳統的方法重載(您可以定義多個具有相同名稱但參數不同的方法)。
相反,您可以使用可選參數或聯合類型來實現類似的功能。
答:裝飾器是作為 JavaScript 提案引入的,是可用于修改或擴展類屬性、方法等的特殊函數。在 TypeScript 中,當裝飾器應用于類成員時,它們會提供元數據或更改被裝飾元素的行為。它們可用于各種任務,例如日志記錄、驗證或增強功能。
接下來,這幾道面試題是針對高級 TypeScript 開發人員的問題,有興趣的小伙伴可以繼續閱讀。
答:TypeScript 的類型推斷是指編譯器在沒有顯式類型注釋的情況下自動推斷和分配類型的能力。雖然鼓勵顯式類型,但編譯器會盡可能使用上下文(如變量初始化、返回語句等)來推斷類型。上下文輸入等功能有助于函數表達式等場景。
答案:類型保護是執行運行時檢查并縮小條件塊內類型范圍的表達式。常見的類型保護包括 typeof 和 instanceof。自定義類型保護是一個函數,其返回類型是使用 is 關鍵字縮小類型的類型謂詞,例如 function isFish(pet: Fish | Bird): pet is Fish。
答:聲明合并是指編譯器將多個同名的聲明合并到一個定義中。此功能對于接口非常強大:如果多次定義一個接口,TypeScript 會將其視為具有組合成員的單個接口。這在擴展現有類型或使用模塊化代碼時非常有用。
答案:條件類型允許根據條件以更動態的方式表達類型。它們遵循 T 延伸 U ?X : Y,這意味著如果類型 T 可分配給 U,則類型為 X,否則為 Y。這使得基于類型之間的關系可以進行更靈活的類型操作。
答案:keyof 運算符生成給定類型的已知公共屬性名稱的并集,這對于限制可能的字符串值或創建映射類型很有用。typeof 運算符在類型上下文中使用時,獲取變量、常量或對象文字的類型,這對于基于現有對象的形狀創建類型非常有用,而無需手動重復其結構。
記住:除了面試題之外,持續學習和良好的學習心態,也非常重要,編程之路是一條無盡頭的學習之路。
最后,希望這些內容對您學習TpyeScript有所幫助。
本文鏈接:http://www.tebozhan.com/showinfo-26-10893-0.html30道針對TypeScript面試的必須掌握的面試題
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: CSS實現十個功能強大的一行布局技巧
下一篇: 介紹五個非常實用的IDEA使用技巧