【前端高频面试题】 - TypeScript 篇

【前端高频面试题】—— TypeScript 篇(2025-2026 最新趋势版)

以下是目前大厂和中高级前端岗位最常问的 TypeScript 面试题,按出现频率和难度从高到低排序,涵盖基础、进阶、工程化、类型体操等多个维度。

基础 & 核心概念(几乎必问)

  1. TypeScript 和 JavaScript 的主要区别是什么?TypeScript 的优势和劣势分别有哪些?
  2. type 和 interface 有什么区别?什么场景下应该用哪个?
  3. 什么是类型推断(Type Inference)?举几个常见的类型推断场景。
  4. const 和 readonly 的区别?什么时候用 readonly?
  5. 什么是类型兼容性(Type Compatibility)?结构类型系统和标称类型系统有什么区别?
  6. any、unknown、never 三者的区别和使用场景分别是什么?
  7. 泛型(Generics)是什么?为什么需要泛型?写出几个常见的泛型工具类型的使用场景。

中级 & 常用高级类型(非常高频)

  1. extends 在 TypeScript 中有几种含义?分别是什么?
  2. 条件类型(Conditional Types)是什么?infer 关键字怎么用?
  3. 分布式条件类型(Distributive Conditional Types)是什么?什么时候会触发分布式?
  4. keyof、typeof、in、as const 这几个关键字分别在什么场景下使用?
  5. 请手写以下几个高频工具类型(至少说出思路)
    • Partial
    • Required
    • Pick<T, K>
    • Omit<T, K>
    • Exclude<T, U>
    • Extract<T, U>
    • NonNullable
    • ReturnType
    • Parameters
    • ConstructorParameters
    • InstanceType
  6. 如何实现一个深度 Partial(DeepPartial)?

进阶 & 类型体操(中高级必考)

  1. 如何约束泛型参数必须是某个类型的 key?(keyof)
  2. 如何写一个类型,让它接收一个对象类型,返回这个对象所有值的联合类型?
  3. 如何实现一个类型 Get<T, K>,可以支持多级路径(如 Get<User, ‘address.street’>)?
  4. 什么是映射类型(Mapped Types)?如何利用映射类型实现一个类型反转(key 和 value 互换)?
  5. 如何实现一个类型 IsEqual<T, U>,判断两个类型是否完全相等?(考虑分布式)
  6. 如何写一个类型,让它把一个联合类型转成交叉类型?(Union to Intersection)
  7. 模板字面量类型(Template Literal Types)在 4.1+ 版本有什么典型应用场景?

工程 & 实际应用(大厂偏爱)

  1. 在项目中如何更好地使用 TypeScript?(最佳实践角度)
  2. @ts-ignore、@ts-expect-error、@ts-nocheck、@ts-check 分别是什么意思?使用场景和优先级?
  3. declare 关键字有什么作用?什么时候需要用 declare?
  4. 如何给第三方没有类型定义的库写类型声明文件(.d.ts)?
  5. 如何处理 React 中常见的类型问题?
    • FC vs FunctionComponent
    • PropsWithChildren
    • useRef 的泛型
    • forwardRef + useImperativeHandle 的类型
    • event 类型(React.MouseEvent、React.ChangeEvent 等)
  6. TypeScript 如何实现函数重载(Function Overloading)?
  7. const enum 和普通 enum 的区别?tree-shaking 的时候有什么影响?
  8. satisfies 操作符(4.9+)有什么用?举例说明。

类型体操 & 难题(资深/难题)

  1. 实现一个类型 Flatten,把多维数组展平为一维
  2. 实现一个类型 Mutable,把所有 readonly 属性变成可变
  3. 实现一个类型 DeepReadonly,深度 readonly
  4. 实现一个类型 Diff<T, U>,找出 T 中不在 U 中的属性
  5. 实现一个类型 PromiseAll 的类型定义(类似 Promise.all 的类型)
  6. 实现一个类型 Last,获取元组最后一个元素类型
  7. 实现一个类型 TupleToObject,把元组转成对象类型(key 和 value 相同)

总结:面试准备建议(2025-2026 版)

如果你正在准备面试,可以告诉我你现在的水平(初级/中级/高级)或者你最想深入的几个题,我可以:

  • 给你详细答案 + 代码示例
  • 帮你模拟面试追问
  • 提供更难的体操题

你想先看哪几道题的详细解析?或者直接来一套模拟面试?

Read more

基于Java和高德开放平台的WebAPI集成实践-以搜索POI2.0为例

基于Java和高德开放平台的WebAPI集成实践-以搜索POI2.0为例

目录 前言 一、高德搜索API简介 1、高德开放平台 2、搜索功能介绍  3、部分API介绍 二、Uniapi集成高德API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、常见问题与优化 四、总结 前言         在当今数字化时代,地理信息系统(GIS)和位置服务(LBS)已成为许多应用程序的核心组成部分。无论是导航、物流、社交网络还是电子商务,位置数据的获取和处理都显得尤为重要。高德开放平台作为国内领先的地理信息服务提供商,提供了丰富的WebAPI接口,帮助开发者快速集成地图、导航、搜索等功能。其中,POI(Point of Interest)搜索是许多应用场景中的关键功能,它能够帮助用户快速找到附近的兴趣点,如餐馆、酒店、加油站等。         Java作为一种广泛使用的编程语言,因其跨平台性、

M2LOrder WebUI自动化测试:Playwright编写UI交互回归测试脚本

M2LOrder WebUI自动化测试:Playwright编写UI交互回归测试脚本 1. 为什么需要为M2LOrder WebUI写自动化测试? 想象一下这个场景:你花了好几天时间,终于把M2LOrder情感识别系统的WebUI界面开发完成,所有功能都测试了一遍,看起来完美无缺。你兴高采烈地部署上线,结果第二天用户反馈说“批量分析按钮点不了”、“模型列表刷新不出来”。你赶紧检查,发现是因为昨晚更新了一个小功能,不小心改动了某个CSS类名,导致整个页面交互都失效了。 这种情况在Web开发中太常见了。每次更新代码,都可能引入新的bug,而手动测试每个功能点既耗时又容易遗漏。这就是为什么我们需要自动化测试——让机器帮我们做重复的检查工作。 M2LOrder作为一个提供HTTP API和WebUI两种访问方式的情感分析服务,它的WebUI界面包含了模型选择、情感预测、批量分析等多个交互功能。如果每次更新都要手动测试一遍,不仅效率低下,而且很难保证测试的全面性。 今天,我就来分享如何用Playwright这个现代化的浏览器自动化工具,为M2LOrder WebUI编写一套完整的UI

WebVOWL:OWL本体可视化的终极指南与完整教程

WebVOWL:OWL本体可视化的终极指南与完整教程 【免费下载链接】WebVOWLVisualizing ontologies on the Web 项目地址: https://gitcode.com/gh_mirrors/we/WebVOWL 想要直观理解复杂的OWL本体结构吗?WebVOWL就是你的完美解决方案!🎯 这款基于Web的开源工具专门用于OWL本体的可视化展示,让语义网技术变得触手可及。无论你是语义网初学者还是资深开发者,WebVOWL都能帮助你快速掌握本体知识。 🔍 什么是WebVOWL? WebVOWL是一个强大的Web应用程序,采用VOWL(Visual Notation for OWL Ontologies)可视化符号,将抽象的OWL本体概念转化为直观的图形表示。通过节点、链接和不同形状的可视化元素,你可以轻松理解类、属性、实例之间的复杂关系。 核心功能亮点: * 🎨 基于VOWL标准的可视化表示 * 🌐 纯Web技术实现,无需安装复杂软件 * 📊 支持多种本体格式和实时交互 * 🖼️ 一键导出SVG、JSON等多种格式 �

第一次被一个空窗期半年的前端女生惊艳到了

🎯问:简述深度性能优化方案? 💡答:核心围绕加载与运行时。1)加载优化:使用 Vue3异步组件与路由懒加载,配合 Vite精细化分包(拆分node_modules、大库独立),对稳定库采用CDN外链并启用SRI校验。2)运行时优化:实现图片与组件懒加载(Intersection Observer )、长列表虚拟滚动、高频组件 KeepAlive缓存。成果:首屏加载从3.5s降至1.1s,LCP提升65%,并建立性能监控进行持续追踪。 🎯问:Vue3响应式原理及注意事项? 💡答:基于Proxy的reactive与基于闭包的ref,通过effect收集依赖(track)与触发更新(trigger)。相比Vue2,优势在于直接监听对象/数组变化、支持新增属性。在大型应用中需注意:原始类型需用ref、深层响应式有递归开销、 细粒度依赖可能引发过度追踪。已手写实现简易系统,包含effect嵌套与调度器。 🎯问:跨域解决方案及安全实践? 💡答:除CORS