跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
TypeScript大前端算法

前端高频面试题:TypeScript 核心考点与实战

TypeScript 面试涵盖基础类型系统、中级编码能力及高级类型体操。内容包含 TS 与 JS 区别、any unknown never 辨析、联合交叉类型、泛型应用、interface 与 type 选择、tsconfig 配置关键项、映射条件工具类型等。结合 React Vue 实战场景,讲解第三方库类型处理及项目落地建议。旨在帮助开发者掌握类型安全核心,应对大厂前端技术考核。

漫步发布于 2026/3/26更新于 2026/9/1059 浏览

TypeScript 面试指南

TypeScript(TS)已成为现代前端开发的标配,尤其在 React、Vue、Angular 等框架中,几乎是大厂必考点。面试趋势更注重类型安全、高级类型工具、实际项目应用和 tsconfig 配置。以下精选高频题,分为基础、中级、高级,并附详细解答和代码示例。

基础篇(必背,考察理解 TS 核心价值)

1. 什么是 TypeScript?它与 JavaScript 的区别是什么?

TypeScript 是 JavaScript 的超集(superset),由 Microsoft 开发,最终编译成纯 JS 运行。 主要区别:

  • TS 支持静态类型检查(编译时捕获错误),JS 是动态类型(运行时错误)。
  • TS 有接口、泛型、枚举、装饰器等 OOP 特性。
  • TS 需要编译(tsc),JS 直接运行。
  • TS 提升代码可维护性、IDE 智能提示,但增加学习成本。

2. 为什么大厂前端项目都要用 TypeScript?优势有哪些?

  • 类型安全:编译时发现错误(如拼写错、类型不匹配),减少运行时 bug。
  • 更好重构:IDE 支持重命名、跳转、自动补全。
  • 团队协作:类型作为'文档',明确接口契约。
  • 生态支持:React/Vue/Angular 官方推荐 TS。
  • 大型项目必备:代码规模大时,纯 JS 容易失控。

3. TypeScript 的基本类型有哪些?

原始类型:boolean、number、string、null、undefined、symbol、bigint、void。 对象类型:object、array、tuple(元组)、enum(枚举)。 特殊类型:any(任意,关闭检查,不推荐)、unknown(未知,安全版 any)、never(永不返回)。

any、unknown、never 的区别?
类型描述使用场景安全性
any任意类型,关闭类型检查迁移旧 JS 项目、临时绕过低(不推荐)
unknown未知类型,必须先类型收窄API 返回不确定类型高(推荐)
never永不存在的值(如抛错函数)类型推断的底部类型-

示例:

let val: unknown = 'hello';
if (typeof val === 'string') {
  // 类型收窄
  console.log(val.toUpperCase());
}

基本类型示例:

let isDone: boolean = false;
let num: number = 6;
let str: string = 'hello';
let list: number[] = [1, 2, 3]; // 或 Array<number>
let tuple: [string, number] = ['hello', 10]; // 元组

中级篇(高频,考察实际编码能力)

  • 联合类型:string | number → 值可以是其中一种。
  • 交叉类型:TypeA & TypeB → 值必须同时满足两种类型(对象合并)。
  • typeof 检查原始类型
  • instanceof 检查实例
  • in 检查属性
  • 字面量类型守卫(===)
  • 自定义类型守卫(is 关键字)

类型收窄(Type Narrowing)有哪些方式?

示例:

function padLeft(value: string, padding: string | number) {
  if (typeof padding === 'number') {
    return Array(padding + 1).join(' ') + value; // padding 被收窄为 number
  }
  return padding + value;
}

联合类型(|)和交叉类型(&)的区别?

示例:

type A = { a: string };
type B = { b: number };
type C = A & B; // { a: string; b: number }

泛型(Generics)是什么?应用场景?

泛型允许创建可复用组件,支持类型参数化。 示例:

function identity<T>(arg: T): T {
  return arg;
}
let output = identity<string>('hello'); // T 推断为 string

场景:数组工具、Promise、React 组件 props、Vue defineProps 等。

interface 和 type 的区别?什么时候用哪个?

特性interfacetype
定义对象是(主要用途)是
支持扩展(extends)是是(用 & 交叉类型)
支持声明合并是(同名接口自动合并)否
可定义联合/元组否是
可定义原始类型别名否是

推荐:对象/接口用 interface(支持合并,便于扩展);联合、映射、工具类型用 type。 示例:

interface User {
  name: string;
}
interface User {
  age?: number;
} // 自动合并
type ID = string | number;

高级篇(大厂深挖,考察类型体操)

  • Partial<T>:所有属性可选
  • Required<T>:所有属性必选
  • Readonly<T>:所有属性只读
  • Pick<T, K>:挑选属性
  • Omit<T, K>:排除属性
  • Record<K, T>:键为 K,值为 T 的对象
  • Exclude<T, U> / Extract<T, U>:联合类型排除/提取

tsconfig.json 中哪些配置最重要?

  • target:编译目标(如 es2020)
  • module:模块系统(如 esnext/commonjs)
  • strict:开启所有严格检查(强烈推荐)
  • noImplicitAny:隐式 any 报错
  • strictNullChecks:null/undefined 严格检查
  • esModuleInterop:更好导入 commonjs 模块
  • skipLibCheck:跳过库类型检查(加速编译)

映射类型(Mapped Types)如何使用?

通过 [K in keyof T] 遍历键创建新类型。 示例:

type Optional<T> = { [P in keyof T]?: T[P] }; // 等价于 Partial<T>

条件类型(Conditional Types)是什么?

T extends U ? X : Y 示例:

type IsString<T> = T extends string ? 'yes' : 'no';
type Test1 = IsString<'hello'>; // 'yes'

TypeScript 的工具类型(Utility Types)有哪些常用?

示例:

type User = { name: string; age: number };
type PartialUser = Partial<User>; // { name?: string; age?: number }

实战应用题(框架相关高频)

1. 在 React/Vue 项目中如何使用 TypeScript?

  • React:用 .tsx,定义 props 类型(interface 或 type),useState()。
  • Vue:Vue 3 + TS 用 <script setup lang="ts">,defineProps()。

2. 如何处理第三方库没有类型定义?

  • 用 declare module '库名'; 或安装 @types/库名(DefinitelyTyped)。
  • 极端:用 any 断言,但不推荐。

面试建议

  • 准备项目:准备一个 TS + React/Vue 的个人项目,面试时能说类型如何提升代码质量。
  • 多练类型体操:LeetCode TS 版、Type Challenges(GitHub)。
  • 关注新特性:TS 5.x 的 const type parameters、infer 改进等。

目录

  1. TypeScript 面试指南
  2. 基础篇(必背,考察理解 TS 核心价值)
  3. 1. 什么是 TypeScript?它与 JavaScript 的区别是什么?
  4. 2. 为什么大厂前端项目都要用 TypeScript?优势有哪些?
  5. 3. TypeScript 的基本类型有哪些?
  6. any、unknown、never 的区别?
  7. 中级篇(高频,考察实际编码能力)
  8. 类型收窄(Type Narrowing)有哪些方式?
  9. 联合类型(|)和交叉类型(&)的区别?
  10. 泛型(Generics)是什么?应用场景?
  11. interface 和 type 的区别?什么时候用哪个?
  12. 高级篇(大厂深挖,考察类型体操)
  13. tsconfig.json 中哪些配置最重要?
  14. 映射类型(Mapped Types)如何使用?
  15. 条件类型(Conditional Types)是什么?
  16. TypeScript 的工具类型(Utility Types)有哪些常用?
  17. 实战应用题(框架相关高频)
  18. 1. 在 React/Vue 项目中如何使用 TypeScript?
  19. 2. 如何处理第三方库没有类型定义?
  20. 面试建议

更多推荐文章

查看全部
  • 本地部署 Llama3 大模型教程
  • Qwen3.5-4B 微调实战:基于 LLaMA-Factory 构建医疗 AI 助手
  • Python 异步爬虫与 K8S 弹性伸缩:构建高并发数据采集引擎
  • 零基础入门网络安全学习指南
  • 国产数据库新机遇:电科金仓以融合技术同步全球竞争
  • Midjourney 工作原理、使用流程及优缺点分析
  • OpenClaw 安装配置与使用指南
  • Ubuntu 磁盘空间与分区查看命令整理
  • 3DMAX VR 渲染器局部渲染设置教程
  • C++ STL:从零手写 string 及高频易错点复盘
  • OpenClaw 公网访问实战:借助 cpolar 突破局域网限制
  • Hx0 鹰眼:无需系统代理的轻量抓包与 AI 审计扩展
  • 季节 - 趋势分解(STL)方法详解
  • cx_Freeze 打包 Python:setup.py 配置与资源管理要点
  • Android 技术面试指南:Java、Kotlin 与核心知识点解析
  • 基于 Python Django 的电影市场预测分析系统数据可视化
  • TapNow AI 视频平台实测:导演级精准控制与物理一致性解析
  • ChatGPT 结构化 Prompt 高级应用指南
  • Mac 本地大模型部署实战:Ollama 与 ChatBox 配置指南
  • 西门子 S7-1200FC PLC 与松下机器人 Profinet 通信及外部自动控制

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online