TypeScript
入门预计上手 2-4 周星团 编程语言
岗位需求
2 核心 · 0 加分
在职岗位将其列为技能要求
核心岗位薪资带
8k-38k
核心要求岗位的月薪区间
需求趋势
上升 0稳定 1收缩 1
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. any、unknown、never 三种类型有什么区别?
any 关闭类型检查,任意操作都被放行,本质是退出类型系统,会把错误推迟到运行时并污染调用方,只适合迁移期临时兜底。unknown 是类型安全的 any,任何值都可赋给它,但使用前必须收窄(typeof、instanceof、自定义守卫),强制处理不确定性,适合承接外部输入、JSON 解析与第三方边界。never 表示永不存在的值类型,函数抛异常或死循环返回 never,也是穷尽检查的工具:switch 判别联合末尾对 never 赋值可让编译器强制新增分支被处理。答题线索是「any 放弃检查、unknown 延迟检查、never 不可能发生」,并强调用 unknown 替代 any 是代码质量分水岭。
2. interface 与 type 别名的区别是什么?如何选择?
两者都能描述对象形状且都支持泛型,日常大量场景可互换。差异主要在:interface 可被 extends 继承、允许声明合并(同名接口自动合并,适合给 window 等全局对象扩属性、以及库的扩展点),而 type 用交叉类型实现组合且不能重名;type 能表达联合、元组、条件类型、映射类型与模板字面量类型等所有类型运算,interface 只能描述对象与函数形状。选型惯例是给对象、类实现与可扩展公共 API 用 interface,需要联合、工具类型与别名复用时用 type,团队统一即可。加分点:了解 interface 之间的 extends 与类型交叉 & 在冲突属性上的不同表现(继承报错而交叉得到 never),能说明声明合并对库作者是双刃剑。
3. 什么是结构化类型(structural typing)?
TypeScript 的类型兼容采用结构化比较而非名义标示:只要形状兼容即可赋值,变量名、声明位置无关。例如一个含 name 与 age 属性的对象可以直接赋给 interface Person,无需显式 implements。这与 Java、C# 等名义类型语言根本不同,也让鸭子类型获得了编译期保障。推论包括:多余属性检查只在对象字面量直接赋值时触发(防止拼写错误),函数参数双向协变的严格开关 strictFunctionTypes,以及「接口是对形状的描述而非身份」。实际工程中利用结构化类型可以轻松为第三方库类型做适配层,测试时用最小形状的假对象替代依赖,不必继承任何基类。能对比名义类型并说出双向兼容的坑即为优秀回答。
4. 什么是类型收窄与类型守卫?请举例说明。
收窄指编译器依据控制流分析把宽类型逐步细化为具体类型的过程。常见手段:typeof 判别原始类型、instanceof 判别类实例、in 操作符判别属性存在、判别联合的标签字面量比较,以及自定义守卫函数 is Fish。可辨识联合是最佳实践,如 type Shape 等于 Circle 或 Square 的联合,各自带 kind 标签,switch 之后每个分支类型自动确定。守卫失效的典型场景是把判断抽成普通函数或存进变量再判断,控制流分析无法穿透,需要显式谓词。答题时给出判别联合加穷尽检查(default 分支赋值 never)的完整例子,说明既消除强制断言又让新增分支编译报错,是最能体现代码质量的答案。
5. tsconfig 中 strict 严格模式包含哪些行为?
strict 是聚合开关,等价于同时开启若干检查:strictNullChecks 把 null 与 undefined 从所有类型中剥离,必须显式处理可空值,是最有价值的一项;noImplicitAny 禁止隐式 any,函数参数必须标注;strictFunctionTypes 让函数参数按逆变检查;strictBindCallApply、strictPropertyInitialization(类属性必须初始化)、noImplicitThis、useUnknownInCatchVariables(catch 变量为 unknown)等也包含在内。新项目应默认开启 strict,并在严格基础上再加 noUncheckedIndexedAccess(索引访问带 undefined)。旧项目迁移可分步:先开 noImplicitAny 再开 null 检查。能点出 strictNullChecks 消灭最多的空指针问题、以及 strict 只影响编译期不改变运行时行为,即为完整回答。
官方文档
1 条官方手册与发行说明,类型系统行为以它为最终依据
推荐教程
2 条开源中文入门教程,从 JavaScript 视角渐进讲类型
中文快速上手,适合从 JS 平滑迁移的开发者
推荐课程
1 条深入浅出的免费经典在线书,类型思维与工程实践并重
上手实践
2 条刷题式类型系统训练,从简单到地狱难度分级进阶
官方在线运行环境,即时看类型推导与编译产物
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

