TypeScript interface extends 和交叉类型 & 组合对象时有什么区别?
对比接口继承和交叉类型的兼容要求、冲突诊断时机与字段替换方式,展示 never 属性,并说明联合类型无法直接作为普通接口继承目标。
类型系统基础专题面试题第 1 页,显示第 1–39 题,共找到 39 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
对比接口继承和交叉类型的兼容要求、冲突诊断时机与字段替换方式,展示 never 属性,并说明联合类型无法直接作为普通接口继承目标。
围绕“TypeScript 交叉类型如何合并多个对象类型?请处理冲突属性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 a & b 合成所有属性,若冲突则取两者交叉(如 string & number 为 never)。
围绕“TypeScript 中 keyof 对可选属性与只读属性有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 keyof 对可选返回所有属性键(包括可选键),对 readonly 无影响,但索引访问会包括 undefined,避免过深。
围绕“TypeScript 中布尔字面量类型(true/false)有哪些实际应用?请举例”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕展示用于标志位的区分,如 isActive: true,可与联合组合,避免涉及常量枚举。
围绕“TypeScript 中 const 断言 (as const) 如何影响字面量类型推断?与枚举有何关联”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 as const 将宽类型收窄为字面量,并可替代枚举部分场景,但不深入比较枚举差异。
围绕“TypeScript 中字面量类型可以通过 null 或 undefined 组合吗?请举例”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 'success' | 'error' | null 等可行,但 null 本身是字面量与其他类型组合,可能影响可空性。
围绕“TypeScript 是否支持数字或 bigint 字面量类型?如何生成枚举值联合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕展示 1|2|3 或 3n 字面量,可结合 const 对象生成联合,避免与字符串字面量混淆。
对比 const 原始值、可变对象属性和数组的字面量推断,说明显式联合注解、as const 与 satisfies 的作用,以及只读类型不等于运行时冻结。
围绕“TypeScript 对象属性为字面量时为何会被拓宽?如何保持字面量类型”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明在变量与 const 外的对象属性若可变可拓宽,可用 as const 修饰,避免数组元素拓宽细节。
围绕“TypeScript 中 in 运算符如何帮助收窄结构类型联合?请举一个实际例子”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕演示 'prop' in obj 检查用于区分具有不同属性的对象,避免适用于普通对象与数组。
围绕“TypeScript 中 never 类型可赋值给任何类型,但哪些类型可赋值给 never?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明只有 never 本身可赋给 never,体现空集语义。
展示 assertNever 让新增联合成员触发编译错误,解释 never 与 void 的差异、default 返回值的隐藏遗漏,以及外部数据仍需要运行时校验。
围绕“TypeScript 中 never 类型通常用于哪些典型场景?请列举至少三种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖列出不允许变量、穷尽断言、永远抛错函数等场景,避免被误认为不可达代码。
围绕“TypeScript 中为何可选回调参数会导致调用报错?如何正确声明”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释普通可选参数与回调中的严格函数类型检查差异,给出 ?: 与默认值用法,避免讨论 this。
围绕“TypeScript 可选链 (?.) 在类型层面对可选属性有何影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明访问 a?.b 在类型上可能得到 undefined,与可选属性声明交互,帮助联合收窄,不深入语法细节。
围绕“TypeScript 中属性同时声明可选 (?) 和 readonly 时意味着什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释可选与只读可适用于同一属性,不可赋值但可缺失,不造成冲突,给出示例。
围绕“TypeScript 中属性可选 (?) 与显式声明 undefined 有何区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 {a?: string} 与 {a: string|undefined} 在检查严格性上的区别,避免涉及 null。
围绕“TypeScript 中 readonly 数组与普通数组有何区别?如何安全转换”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕强调数组方法的可变性限制,提供 readonly T[] 与 Array<T> 区别,以及类型断言转换,避免讨论元组。
围绕“TypeScript 中 readonly 修饰符是浅层的还是深层的?如何实现深层只读”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖指出 readonly 仅影响第一层属性,可使用映射类型实现 DeepReadonly,说明原理,避免引入第三方依赖。
围绕“TypeScript 中 readonly 修饰符在类属性与接口属性中的实现差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明两者均编译为普通属性,但赋值时机和构造器限制不同,避免讨论 private 等。
围绕“TypeScript 中定义只读参数的推荐方式有哪些?readonly 修饰符是否能用于函数参数”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释参数不能声明 readonly,但可使用 ReadonlyArray 或类型守卫,避免修改,给出别名模式。
围绕“TypeScript 中如何定义 readonly 元组?它与普通元组相比有何特性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出 readonly [number, string] 示例,说明元素不可写,避免与数组混淆。
围绕“TypeScript 的结构类型是否等同于鸭子类型?请解释相似与差异”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较运行时鸭子类型与类型检查时的结构兼容,强调静态诊断,避免讨论类型断言。
解释新鲜对象字面量的额外属性检查、变量赋值时的结构兼容与弱类型例外,展示 satisfies 检查配置拼写,并区分静态约束和运行时字段过滤。
通过坐标对象解释 TypeScript 的结构兼容、赋值方向和成员检查,区分接口名称、额外属性检查与类私有成员,并说明品牌类型适用边界。
围绕“TypeScript 的模板字面量类型如何用于构造联合类型?请举一个具体模式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕演示 `${A}-${B}` 生成联合,给出主题(如事件名)示例,避免过多语法细节。
围绕“TypeScript 中 (string | number)[] 与 string[] | number[] 有何区”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖前者是元素为联合的数组,后者是数组类型联合,属性访问与推断不同,给示例避免混淆。
围绕“TypeScript 中当变量是联合类型时,为什么可以调用所有分支共有的方法”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释联合类型可访问共同成员,给出 string|number 调用 toString 示例,避免扩展方法处理的不同签名。
围绕“TypeScript 中如何通过判断字面量值来收窄联合类型”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 if (value === 'a') 或 switch 如何使类型收窄为子类型,避免与其他收窄方法混淆。
围绕“TypeScript 中联合类型包含函数时如何推断其签名?如何正确调用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明函数联合必须参数兼容,调用时使用交叉参数?介绍重载与包围,避免过多细节。
围绕“TypeScript 中元组与数组的联合如何定义函数重载式结构”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕使用 [string, number] 或 [boolean] 联合表示参数组,可能用于类型安全的事件传递,避免与数组混淆。
围绕“TypeScript 中联合类型与泛型在表达输入多样性上有何不同?何时选择联合而非泛型”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕当输入类型有限固定集合得确定性操作时用联合,需保留关系时用泛型,给出情境,不深入泛型约束。
从可接受值集合解释联合与交叉,展示对象字段读取、同时满足契约和冲突属性,并区分类型组合与 JavaScript 对象合并。
围绕“TypeScript 中如何将 catch 子句中的 unknown 错误进行安全类型处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明自 TS4.4 catch 默认 unknown,需要收窄(如 instanceof),避免缺失检查可能报错。
围绕“TypeScript 中如何安全地处理 JSON.parse 的结果(通常为 any)以转换为 unknown 并收”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出类型守卫或逐步收窄的示例,构建运行时校验,避免讨论泛型 parse<T>() 的过度信任。
围绕“TypeScript 中 unknown 类型的特性如何影响 keyof unknown 等操作?为什么它没有属性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 unknown 不能直接访问属性,keyof unknown 为 never,并给出收窄原因,避免涉及 any 对照。
展示从 unknown 逐层排除空值、检查字段与业务格式的解析函数,说明类型谓词责任、数组和嵌套结构验证,以及校验后复制数据的作用。
比较 unknown 与 any 在赋值、属性访问和调用中的行为,解释外部输入边界如何保留检查责任,以及断言、JSON.parse 和双重断言的风险。
围绕“TypeScript 中 unknown 与 never 在类型系统中有何相对关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖从集合论解释 unknown 为全集、never 为空集,两者互为补集,赋值方向相反,避免实例代码。