Typescript 面试题
共 61 道 Typescript 面试题。答案默认折叠,便于先自行作答。 1. 如何管理和优化 tsconfig? 难度:3 · 类型:QA 题目要点 tsconfig 应被视为工程规范而非临时配置;通过分层与继承降低维护成本;类型严格性需要渐进式收紧而非一次性激进开启;合理控制编译范围以优化性能;在复杂工程中利用 tsconfig 约束依赖边界,使类型系统服务于长期可维护性。 参考答案 tsconfig 的管理与优化,本质上是在类型安全、开发体验与工程效率之间做长期平衡。它并不是一次性配置文件,而是随着项目规模、团队协作方式和构建体系不断演进的工程资产。 首先需要明确 tsconfig 在工程中的角色定位。它既是 TypeScript 编译器的输入约束,也是 IDE 类型分析与提示能力的基础配置。如果把 tsconfig 仅当作“让项目能跑起来的必要文件”,往往会在项目中后期暴露出类型失控、编译缓慢或不同环境行为不一致的问题。因此,治理 tsconfig 的第一步,是将其视为工程规范的一部分,而不是单纯的工具配置。 在实际管理中,通常会通过“分层”的方式来降低复杂度。将通用且稳定的配置抽离为基础 tsconfig,由不同运行环境或子项目通过 extends 继承,再在局部覆盖差异化选项。这种方式可以避免在多个 tsconfig 中重复维护同一组 compilerOptions,也能清晰表达哪些约束是全局共识,哪些是特定场景的取舍。例如,类型严格性、模块解析策略往往属于全局约束,而是否生成声明文件、是否开启 sourceMap 则更偏向构建阶段需求。 在优化层面,类型严格性的管理尤为关键。一次性开启所有严格选项,在历史项目中通常不可行,反而会导致大量噪音,削弱团队对类型系统的信任度。更可持续的做法,是以 strict 为目标方向,但通过逐步引入单项严格规则,让类型质量随时间提升,而不是通过一次激进配置制造阻力。tsconfig 在这里承担的是“收紧边界”的角色,而不是制造阻断。 编译性能同样是 tsconfig 优化中不可忽视的一环。随着项目体量增大,合理控制 include、exclude 范围,避免将无关文件纳入类型分析,是最直接也最有效的手段。同时,明确区分“类型检查”与“代码转译”的职责,可以避免在开发阶段承担不必要的编译成本。在一些工程中,会通过不同 tsconfig 分别服务于 IDE 类型检查与构建流程,从而兼顾体验与效率。 在 Monorepo 或组件库场景下,tsconfig 还承担着依赖边界约束的职责。通过 project references 明确包之间的依赖关系,不仅可以加速增量编译,也能在类型层面阻止不合法的跨包引用。这类配置一旦稳定下来,往往比 lint 规则更可靠,因为它直接作用于编译阶段。 长期来看,tsconfig 的优化不是“调参数”,而是通过持续审视哪些约束是必要的、哪些已经不再适用,让类型系统始终贴合真实的工程状态。当 tsconfig 能够稳定表达团队的工程共识时,它的价值才真正体现出来。 2. Boolean 和 boolean 有什么区别? 难度:3 · 类型:QA ...