首页 > web前端 > js教程 > 正文

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

PHPz
发布: 2024-09-11 06:41:40
原创
417 人浏览过

【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
Type System Static typing with compile-time type checks. Types can be specified for variables, function parameters, and return values. Dynamic typing with runtime type checks, which can lead to type-related runtime errors.
Type Annotations Supports type annotations to explicitly define types. E.g., let name: string = "Alice"; No type annotations. Types are determined at runtime.
Compilation Requires compilation to JavaScript. TypeScript compiler checks for type errors and generates equivalent JavaScript code. Runs directly in browsers or Node.js without a compilation step.
Object-Oriented Programming Richer OOP features such as classes, interfaces, abstract classes, and access modifiers. Basic OOP features with prototype-based inheritance.
Advanced Features Includes all ES6 and ES7 features, plus additional features like generics, enums, and decorators. Supports ES6 and later standards, but lacks some of the advanced features provided by TypeScript.
TypeScript JavaScript 标题> 类型系统 带有编译时类型检查的静态类型。可以为变量、函数参数和返回值指定类型。 带有运行时类型检查的动态类型,这可能会导致与类型相关的运行时错误。 输入注释 支持类型注释来显式定义类型。例如,让 name: string = "Alice"; 没有类型注释。类型是在运行时确定的。 编译 需要编译为 JavaScript。 TypeScript 编译器检查类型错误并生成等效的 JavaScript 代码。 直接在浏览器或 Node.js 中运行,无需编译步骤。 面向对象编程 更丰富的 OOP 功能,例如类、接口、抽象类和访问修饰符。 具有基于原型的继承的基本 OOP 功能。 高级功能 包括所有 ES6 和 ES7 功能,以及泛型、枚举和装饰器等附加功能。 支持 ES6 及更高版本的标准,但缺少 TypeScript 提供的一些高级功能。 表>

3. Types de données de base dans TypeScript

  • Booléen : Représente des valeurs vraies ou fausses.
  • Nombre : représente à la fois des nombres entiers et des nombres à virgule flottante.
  • String : représente des données textuelles, en utilisant des guillemets simples ou doubles.
  • Array : représente une collection de valeurs d'un type spécifié, en utilisant type[] ou Array.
  • Tuple : Représente un tableau avec un nombre fixe d'éléments avec des types spécifiés.
  • Enum : Représente un ensemble de constantes nommées.
  • Any : représente tout type de valeur. Ne fournit aucune vérification de type.
  • Void : Représente l'absence de valeur, couramment utilisé comme type de retour des fonctions qui ne renvoient pas de valeur.
  • Null et Undefined : représentent respectivement l'absence de valeur et l'état non initialisé.
  • Jamais : représente des valeurs qui n'apparaissent jamais, telles que des fonctions qui génèrent des erreurs ou s'exécutent indéfiniment.
  • Objet : Représente les types non primitifs.

4. Que sont les génériques dans TypeScript ? Comment sont-ils utilisés ?

Les génériques permettent aux fonctions, classes et interfaces de fonctionner avec n'importe quel type tout en garantissant la sécurité des types.

Exemple :

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

const numberIdentity = identity<number>(42);
const stringIdentity = identity<string>("Hello");

登录后复制

Dans cet exemple, la fonction d'identité utilise un générique, lui permettant d'accepter et de renvoyer des valeurs de tout type.

5. Différence entre inconnu et tout dans TypeScript

  • any Type : représente tout type de valeur et contourne toute vérification de type. N'importe quelle valeur peut lui être attribuée sans vérification de type.
  • Type inconnu : Représente un type inconnu. Les valeurs de type inconnu doivent être vérifiées avant de pouvoir être utilisées, ce qui constitue un moyen plus sûr de gérer les valeurs dont le type est incertain.
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. Différence entre le modificateur en lecture seule et le mot-clé const

  • Modificateur en lecture seule : Utilisé sur les propriétés des objets pour les rendre immuables après initialisation.
  • const Keyword : Utilisé pour déclarer des variables avec des références immuables. Les propriétés de l'objet peuvent toujours être modifiées.
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. Décorateurs en TypeScript

Les décorateurs sont une fonctionnalité TypeScript spéciale qui permet d'ajouter des métadonnées ou de modifier des classes, des méthodes, des propriétés ou des paramètres.

Types :

  • Décorateurs de classe : appliqués aux constructeurs de classe pour modifier le comportement de la classe ou ajouter des métadonnées.
  • Décorateurs de méthodes : appliqués aux méthodes pour modifier leur comportement ou ajouter des métadonnées.
  • Décorateurs d'accesseurs : appliqués pour obtenir ou configurer les accesseurs afin qu'ils modifient leur comportement.
  • Décorateurs de propriétés : appliqués aux propriétés de classe pour ajouter des métadonnées ou modifier leur comportement.
  • Décorateurs de paramètres : appliqués aux paramètres de méthode pour ajouter des métadonnées.

Exemples :

  • Décorateur de classe :
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}`;
  }
}

登录后复制
  • Méthode Décorateur :
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;
  }
}

登录后复制

Utilisation :

Les décorateurs sont activés en définissant experimentalDecorators sur true dans tsconfig.json.

8. Différence entre l'interface et le type

interface et type sont tous deux utilisés pour définir des types d'objets, mais ils présentent quelques différences :

interface type
Basic Usage Defines the shape of objects, including properties and methods. Defines primitive types, object types, union types, intersection types, etc.
Extension Supports declaration merging. Multiple declarations of the same interface are automatically merged. Does not support declaration merging.
Union and Intersection Types Not supported. Supports union (`
Primitive Type Aliases Not supported. Supports aliasing primitive types.
Mapped Types Not supported. Supports mapped types.
Class Implementation Supports class implementation using implements. Does not support direct class implementation.
interface

tapez

ête> Utilisation de base Définit la forme des objets, y compris les propriétés et les méthodes. Définit les types primitifs, les types d'objets, les types d'union, les types d'intersection, etc. Extension Prend en charge la fusion des déclarations. Plusieurs déclarations de la même interface sont automatiquement fusionnées. Ne prend pas en charge la fusion de déclarations. Types d'union et d'intersection Non pris en charge. Prend en charge l'union (` Alias ​​de type primitif Non pris en charge. Prend en charge l'alias des types primitifs. Types mappés Non pris en charge. Prend en charge les types mappés. Implémentation de classe Prend en charge l'implémentation de classe à l'aide d'impléments. Ne prend pas en charge l'implémentation directe de classe. Ces questions et réponses devraient aider à préparer les entretiens TypeScript en couvrant les concepts fondamentaux et l'utilisation pratique.

以上是【面试精要】常见TypeScript面试题的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!