如何通过TypeScript面试:热门问题

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何通过TypeScript面试:常见问题



TypeScript已牢固确立为现代Web开发中最热门的工具之一。如果你正在准备技术面试,掌握TypeScript的基础知识和进阶特性是必备条件。本文将解析面试中常被问到的核心问题,并通过代码示例强化知识点。



1. 基础类型及其与JavaScript的区别

面试中一定会问到TypeScript的基础类型及其行为特性。与JavaScript的主要区别在于静态类型。我们来看看关键点。



1.1. 原始类型:string, number, boolean

TypeScript增加了显式类型注解。例如:

let name: string = 'Anna';let age: number = 30;let isActive: boolean = true;

如果没有注解,TypeScript会自动推断类型(类型推断)。



1.2. any和unknown类型

any会关闭类型检查——最好避免使用。unknown是更安全的替代方案,需要在使用前进行类型检查:

let data: unknown = 'string';// console.log(data.toUpperCase()); // 报错!if (typeof data === 'string') {  console.log(data.toUpperCase()); // 正常}


1.3. never和void

  • void — 函数不返回任何值。
  • never — 函数永远不会结束(抛出错误或无限循环)。
function throwError(msg: string): never {  throw new Error(msg);}


2. 接口与类型(interface vs type)

这是最常见的问题之一。两种机制都能描述对象结构,但存在差异。



2.1. 何时使用interface

  • 声明对象和类的契约。
  • 支持扩展(声明合并):
interface User {  name: string;}interface User {  age: number;}// 现在User包含name和age


2.2. 何时使用type

  • 用于联合类型、交叉类型和原始类型别名。
  • 不支持声明合并。
type Status = 'active' | 'inactive';type Person = { name: string } & { age: number };

面试问题:"interface能否被type替代?" — 可以,但对于类和扩展场景,interface更优。



3. 泛型

泛型允许创建可处理任意类型的可复用组件。这是高级职位的必考点。



3.1. 简单泛型函数

function firstElement<T>(arr: T[]): T {  return arr[0];}const num = firstElement([1, 2, 3]); // numberconst str = firstElement(['a', 'b']); // string


3.2. 泛型约束(extends)

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {  return obj[key];}const user = { name: 'Ivan', age: 25 };console.log(getProperty(user, 'name')); // Ivan


3.3. 接口中的泛型

interface Repository<T> {  getById(id: number): T;  save(item: T): void;}

常被问到:"既然有any,为什么还需要泛型?" — 泛型能保持类型安全。



4. 工具类型与高级特性

内置工具类型(Partial, Required, Pick, Omit)能体现对TypeScript的深入理解。



4.1. Partial和Required

interface Task {  title: string;  done: boolean;}const partialTask: Partial<Task> = { title: 'Learn TypeScript' };const requiredTask: Required<Task> = { title: 'Learn TypeScript', done: false };

博客

书籍推荐