”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 【面试精要】常见TypeScript面试题

【面试精要】常见TypeScript面试题

发布于2024-11-01
浏览:233

【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]删除
最新教程 更多>
  • 反射动态实现Go接口用于RPC方法探索
    反射动态实现Go接口用于RPC方法探索
    在GO 使用反射来实现定义RPC式方法的界面。例如,考虑一个接口,例如:键入myService接口{ 登录(用户名,密码字符串)(sessionId int,错误错误) helloworld(sessionid int)(hi String,错误错误) } 替代方案而不是依靠反射...
    编程 发布于2025-05-14
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html posite:sticky; sticky; .Sticky-1 {[ top:1em; z-index:1; 1; { display:gr...
    编程 发布于2025-05-14
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-05-14
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-05-14
  • JavaScript计算两个日期之间天数的方法
    JavaScript计算两个日期之间天数的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    编程 发布于2025-05-14
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-05-14
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-05-14
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-05-14
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-05-14
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-05-14
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-05-14
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-05-14
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-05-14
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-05-14

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3