」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 【面試精要】常見TypeScript面試題

【面試精要】常見TypeScript面試題

發佈於2024-11-01
瀏覽:505

【Interview Essentials】ommon TypeScript Interview Questions

github:https://github.com/Jessie-jzn
网站:https://www.jessieontheroad.com/

1. 为什么使用 TypeScript?

1。静态类型检查

TypeScript 的核心优势是其静态类型检查,这有助于在编译阶段而不是运行时捕获常见错误。这增强了代码的可靠性和稳定性。

2.增强的代码编辑体验

TypeScript 的类型系统可以在编辑器中实现更准确的代码补全、重构、导航和文档功能,从而显着提高开发效率。

3.提高代码可维护性

类型声明使理解代码意图和结构变得更容易,这在团队开发环境中特别有益。

4。高级语言功能

TypeScript 支持 JavaScript 中不存在的高级功能,例如接口、枚举和泛型,有助于开发更加结构化和可扩展的代码。

5。更好的工具支持

TypeScript 提供了各种编译器选项来优化生成的 JavaScript 代码,并通过将 TypeScript 编译为兼容的 JavaScript 来支持不同的 JS 环境。

2. TypeScript 与 JavaScript

TypeScript JavaScript
类型系统 带有编译时类型检查的静态类型。可以为变量、函数参数和返回值指定类型。 带有运行时类型检查的动态类型,这可能会导致与类型相关的运行时错误。
类型注释 支持类型注释来显式定义类型。例如,让 name: string = "Alice"; 没有类型注释。类型在运行时确定。
汇编 需要编译为 JavaScript。 TypeScript 编译器检查类型错误并生成等效的 JavaScript 代码。 直接在浏览器或 Node.js 中运行,无需编译步骤。
面向对象编程 更丰富的 OOP 功能,例如类、接口、抽象类和访问修饰符。 具有基于原型的继承的基本 OOP 功能。
高级功能 包括所有 ES6 和 ES7 功能,以及泛型、枚举和装饰器等附加功能。 支持 ES6 及更高版本的标准,但缺少 TypeScript 提供的一些高级功能。

3. TypeScript 中的基本数据类型

  • 布尔值:代表真或假值。
  • 数字:表示整数和浮点数。
  • String:表示文本数据,使用单引号或双引号。
  • Array:表示指定类型的值的集合,使用type[]或Array.
  • 元组:表示一个包含固定数量指定类型元素的数组。
  • Enum:表示一组命名常量。
  • Any:表示任意类型的值。不提供类型检查。
  • Void:表示没有值,常用作不返回值的函数的返回类型。
  • Null 和 Undefined:分别表示没有值和未初始化状态。
  • Never:表示永远不会出现的值,例如抛出错误或无限期运行的函数。
  • Object:表示非原始类型。

4. TypeScript 中的泛型是什么?它们是如何使用的?

泛型允许函数、类和接口与任何类型一起使用,同时仍然强制执行类型安全。

例子:

function identity(arg: T): T {
  return arg;
}

const numberIdentity = identity(42);
const stringIdentity = identity("Hello");

在此示例中,恒等函数使用通用 ,允许它接受和返回任何类型的值。

5. TypeScript中unknown和any的区别

  • any Type:表示任意类型的值并绕过所有类型检查。它可以被赋予任何值,无需类型检查。
  • unknown Type:表示未知类型。未知类型的值在使用之前必须进行检查,这提供了一种更安全的方法来处理类型不确定的值。
let anyVar: any;
let unknownVar: unknown;

anyVar = 5;
anyVar.toUpperCase(); // No compile-time error, but might cause runtime error

unknownVar = "Hello";
if (typeof unknownVar === "string") {
  unknownVar.toUpperCase(); // Type check ensures safety
}

6. readonly修饰符与const关键字的区别

  • readonly 修饰符:用于对象属性,使其在初始化后不可变。
  • const 关键字:用于声明具有不可变引用的变量。对象的属性仍然可以修改。
const obj = { name: "John" };
obj.name = "Doe"; // Allowed

interface User {
  readonly id: number;
  name: string;
}

const user: User = { id: 1, name: "John" };
user.name = "Doe"; // Allowed
user.id = 2; // Error, `id` is readonly

7. TypeScript 中的装饰器

装饰器是一种特殊的 TypeScript 功能,允许添加元数据或修改类、方法、属性或参数。

类型:

  • 类装饰器:应用于类构造函数以修改类行为或添加元数据。
  • 方法装饰器:应用于方法以更改其行为或添加元数据。
  • 访问器装饰器:用于获取或设置访问器以修改其行为。
  • 属性装饰器:应用于类属性以添加元数据或修改其行为。
  • 参数装饰器:应用于方法参数以添加元数据。

示例:

  • 类装饰器:
function sealed(constructor: Function) {
  Object.seal(constructor);
  Object.seal(constructor.prototype);
}

@sealed
class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }

  greet() {
    return `Hello, ${this.greeting}`;
  }
}

  • 方法装饰器:
function logMethod(target: any, propertyName: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  descriptor.value = function (...args: any[]) {
    console.log(`Method ${propertyName} called with args: ${JSON.stringify(args)}`);
    return originalMethod.apply(this, args);
  };
}

class Calculator {
  @logMethod
  add(a: number, b: number): number {
    return a   b;
  }
}

用法:

装饰器通过在 tsconfig.json 中将experimentalDecorators设置为 true 来启用。

8. 接口和类型的区别

interfacetype都是用来定义对象类型的,但是它们有一些区别:

界面 类型
基本用法 定义对象的形状,包括属性和方法。 定义基本类型、对象类型、联合类型、交集类型等
扩大 支持声明合并。同一接口的多个声明会自动合并。 不支持声明合并。
并集和交集类型 不支持。 支持联合(`
基本类型别名 不支持。 支持基本类型别名。
映射类型 不支持。 支持映射类型。
类实现 使用 Implements 支持类实现。 不支持直接类实现。

这些问题和答案应该涵盖基本概念和实际用法,有助于为 TypeScript 面试做好准备。

版本聲明 本文轉載於:https://dev.to/jessie_chen_4d333540e0c71/interview-essentials-8-common-typescript-interview-questions-4jki?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:((-215)!empty()in Function Multultiscale中的“ openCV 要解決此問題,必須確保提供給HAAR CASCADE XML文件的路徑有效。在提供的代碼片段中,級聯分類器裝有硬編碼路徑,這可能對您的系統不准確。相反,OPENCV提...
    程式設計 發佈於2025-05-13
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-05-13
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-05-13
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-05-13
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-05-13
  • Java中Lambda表達式為何需要“final”或“有效final”變量?
    Java中Lambda表達式為何需要“final”或“有效final”變量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    程式設計 發佈於2025-05-13
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, attributeError:SomeClass實...
    程式設計 發佈於2025-05-13
  • 如何將來自三個MySQL表的數據組合到新表中?
    如何將來自三個MySQL表的數據組合到新表中?
    mysql:從三個表和列的新表創建新表 答案:為了實現這一目標,您可以利用一個3-way Join。 選擇p。 *,d.content作為年齡 來自人為p的人 加入d.person_id = p.id上的d的詳細信息 加入T.Id = d.detail_id的分類法 其中t.taxonomy ...
    程式設計 發佈於2025-05-13
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-05-13
  • 如何使用FormData()處理多個文件上傳?
    如何使用FormData()處理多個文件上傳?
    )處理多個文件輸入時,通常需要處理多個文件上傳時,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    程式設計 發佈於2025-05-13
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-05-13
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-05-13
  • 在JavaScript中如何並發運行異步操作並正確處理錯誤?
    在JavaScript中如何並發運行異步操作並正確處理錯誤?
    同意操作execution 在執行asynchronous操作時,相關的代碼段落會遇到一個問題,當執行asynchronous操作:此實現在啟動下一個操作之前依次等待每個操作的完成。要啟用並發執行,需要進行修改的方法。 第一個解決方案試圖通過獲得每個操作的承諾來解決此問題,然後單獨等待它們: c...
    程式設計 發佈於2025-05-13
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-05-13
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-05-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3