TypeScript instanceof 如何收窄实例,跨 iframe 为什么可能判断失败?
从原型链解释 instanceof 的运行时证据,展示受控类实例与普通对象的差异,说明多份构造器、跨 realm 数组以及接口和 JSON 数据的边界。
程序员面试题库第 91 页,收录第 4501–4550 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
从原型链解释 instanceof 的运行时证据,展示受控类实例与普通对象的差异,说明多份构造器、跨 realm 数组以及接口和 JSON 数据的边界。
TypeScript 中字面量拓宽会让对象的字面量标签变成 string,as const 如何帮助判别联合成立 本文先给出可直接复述的结论,再用最小代码说明TypeScript 字面量拓宽 as const 判别字段的工作方式、判断依据、项目边界和常见误区。
按请求状态与内容类型两层组织联合,展示逐层检查和保留局部关联,解释嵌套标签向父对象反推的限制、解构 rest 丢失关联与状态组合建模。
TypeScript 的非空断言操作符 ! 与正常的空值收窄相比,各自适用什么场景 本文先给出可直接复述的结论,再用最小代码说明TypeScript 非空断言 ! 空值收窄的工作方式、判断依据、项目边界和常见误区。
TypeScript 中 ?? 和 ?. 如何参与空值收窄,与 || 的行为差异是什么 本文先给出可直接复述的结论,再用最小代码说明TypeScript ?? 可选链 空值收窄 与 || 区别的工作方式、判断依据、项目边界和常见误区。
TypeScript 中可选参数配合默认值后,函数体内该参数的类型会如何变化 本文先给出可直接复述的结论,再用最小代码说明TypeScript 可选参数 默认值 undefined 收窄的工作方式、判断依据、项目边界和常见误区。
如何用 TypeScript 判别联合建模一组状态变更事件,让处理函数的分支既收窄又穷尽 本文先给出可直接复述的结论,再用最小代码说明TypeScript 判别联合 事件处理 reducer 模式 穷尽的工作方式、判断依据、项目边界和常见误区。
TypeScript 的 strictNullChecks 与类型收窄是什么关系,关掉它会失去哪些收窄能力 本文先给出可直接复述的结论,再用最小代码说明TypeScript strictNullChecks 类型收窄 关系的工作方式、判断依据、项目边界和常见误区。
TypeScript 的 switch 中 case 落空(fall-through)会如何影响类型收窄的结果 本文先给出可直接复述的结论,再用最小代码说明TypeScript switch fall-through 类型收窄的工作方式、判断依据、项目边界和常见误区。
TypeScript 5.3 支持的 switch(true) 收窄是什么,它解决了什么写法问题 本文先给出可直接复述的结论,再用最小代码说明TypeScript 5.3 switch true 收窄的工作方式、判断依据、项目边界和常见误区。
TypeScript 中能否通过 Symbol.hasInstance 自定义 instanceof 的收窄行为,有什么限制 本文先给出可直接复述的结论,再用最小代码说明TypeScript Symbol.hasInstance instanceof 自定义收窄的工作方式、判断依据、项目边界和常见误区。
区分真值判断与空值判断,解释零、空串、false 和 NaN 的分支行为,比较显式 null 检查、空值合并与逻辑或,并给出保留有效零值的写法。
TypeScript 自定义类型守卫可能「撒谎」,如何保证守卫实现与谓词类型一致 本文先给出可直接复述的结论,再用最小代码说明TypeScript 类型守卫 不可靠 unsound 运行时校验的工作方式、判断依据、项目边界和常见误区。
列出 typeof 的运行时分类,说明 null、数组与普通对象的区别,演示先排除空值再检查属性,并区分运行时 typeof 与类型位置的 typeof 查询。
TypeScript 中处理外部数据时,为什么 unknown 配合收窄比 any 更安全 本文先给出可直接复述的结论,再用最小代码说明TypeScript unknown vs any 类型收窄的工作方式、判断依据、项目边界和常见误区。
沿条件分支、提前返回和重新赋值解释控制流分析,区分声明类型与当前位置观察类型,并说明闭包和可变属性为什么可能失去已有的收窄证据。
如何实现 Abs<T extends number> 将负数转为正数字面量类型?关键在哪里? 本文先给出可直接复述的结论,再用最小代码说明类型层面实现数字字面量取绝对值的工作方式、判断依据、项目边界和常见误区。
如何将数组或元组类型转换为联合类型?两种写法有什么不同? 本文先给出可直接复述的结论,再用最小代码说明元组类型转联合类型的两种写法的工作方式、判断依据、项目边界和常见误区。
Awaited 工具类型是如何递归解包 Promise 嵌套的?它和手动 infer 有何不同? 本文先给出可直接复述的结论,再用最小代码说明Awaited 递归解包 Promise 的实现原理的工作方式、判断依据、项目边界和常见误区。
从可赋值性解释条件类型的判断分支,展示按结构提取 message 类型,区分外部泛型约束与内部条件,并说明类型分支不等于运行时校验或数据转换。
ConstructorParameters 和 InstanceType 是如何通过条件类型和 infer 抽取构造函数信息的? 本文先给出可直接复述的结论,再用最小代码说明ConstructorParameters 与 InstanceType 实现的工作方式、判断依据、项目边界和常见误区。
实现 DeepMutable 将一个只读类型里所有属性及嵌套对象都变为可变,需要注意哪个陷阱? 本文先给出可直接复述的结论,再用最小代码说明DeepMutable 只读转可变的实现陷阱的工作方式、判断依据、项目边界和常见误区。
如何编写 DeepPartial 让嵌套对象所有层级属性都变为可选?需要考虑哪些边界情况? 本文先给出可直接复述的结论,再用最小代码说明DeepPartial 递归实现与边界情况的工作方式、判断依据、项目边界和常见误区。
实现 DeepReadonly 时如何保留原始对象的方法类型?如何处理 Date、Map 等? 本文先给出可直接复述的结论,再用最小代码说明DeepReadonly 实现与 Date Map 边界处理的工作方式、判断依据、项目边界和常见误区。
在条件类型或映射类型中,泛型参数的默认值(T=never)会影响结果吗? 本文先给出可直接复述的结论,再用最小代码说明泛型默认值对条件类型结果的影响的工作方式、判断依据、项目边界和常见误区。
对比逐成员包装和整体包装,解释裸类型参数、元组包裹、过滤联合与 never 的空联合行为,并说明 any 和复杂条件不能套用简单分发口诀。
如何递归将嵌套数组类型(如 [1, [2, [3]]])展平为单一数组元素类型? 本文先给出可直接复述的结论,再用最小代码说明递归展平嵌套数组类型的工作方式、判断依据、项目边界和常见误区。
用逐元素包装展示 keyof T 同态映射对数组、元组和只读修饰的支持,对照键重映射后的普通对象形态,并说明长度、可选元素及运行时转换边界。
实现一个类型使函数参数提取为元组时保留可选标记?可选参数在 Parameters 中如何表现? 本文先给出可直接复述的结论,再用最小代码说明Parameters 中可选参数的元组表现的工作方式、判断依据、项目边界和常见误区。
如何用 infer 从数组类型中提取前若干个元素(如一次取两个)?如何适应不同长度的元组? 本文先给出可直接复述的结论,再用最小代码说明infer 提取元组前若干个元素类型的工作方式、判断依据、项目边界和常见误区。
infer 关键字在条件类型中扮演什么角色?给出一个自定义类型提取函数返回值的例子。 本文先给出可直接复述的结论,再用最小代码说明TypeScript infer 关键字提取函数返回值类型的工作方式、判断依据、项目边界和常见误区。
区分结构中多个 infer 候选的合并、联合输入分发和重载函数签名提取,展示输出位置联合与输入位置交叉,并说明无法据此模拟实际重载调用选择。
比较四种内置大小写类型操作的范围,展示 Unicode 大写扩展与宽字符串约束,说明非区域化处理、运行时实现和生成键名冲突等边界。
如何判断一个类型是 never?为什么直接使用 T extends never 不行? 本文先给出可直接复述的结论,再用最小代码说明类型层面判断 never 的正确写法的工作方式、判断依据、项目边界和常见误区。
如何判断一个类型是否为元组类型?为什么元组和数组需要区分? 本文先给出可直接复述的结论,再用最小代码说明类型层面判断是否为元组类型的工作方式、判断依据、项目边界和常见误区。
使用模板字面量与 Capitalize 创建 getter 键,说明 never 过滤、字符串键限制和键冲突,并区分类型重命名与实际对象转换。
映射类型中 keyof any 能产生哪些键值?为什么常用它来遍历可用属性名? 本文先给出可直接复述的结论,再用最小代码说明映射类型中 keyof any 的键范围的工作方式、判断依据、项目边界和常见误区。
如何使用 infer 提取数组类型最后一个元素的类型?空数组的边界如何处理? 本文先给出可直接复述的结论,再用最小代码说明infer 提取元组最后一个元素类型的工作方式、判断依据、项目边界和常见误区。
在没有运行时的条件下,仅靠类型能否比较字符串字面量长度(如判断更长)? 本文先给出可直接复述的结论,再用最小代码说明类型层面比较字符串字面量长度的工作方式、判断依据、项目边界和常见误区。
为事件映射表写一个 Lookup 类型,如何根据事件名提取对应的 payload 类型? 本文先给出可直接复述的结论,再用最小代码说明事件映射表 Lookup 类型提取 payload的工作方式、判断依据、项目边界和常见误区。
从有限键联合和 keyof 映射解释新对象类型生成,展示保留字段关系与只读可选修饰符,区分任意字符串索引、运行时对象创建和浅层类型变换。
映射类型里 -? 和 -readonly 修饰符起什么作用?它们如何覆盖原有修饰符? 本文先给出可直接复述的结论,再用最小代码说明映射类型 -? 与 -readonly 修饰符作用的工作方式、判断依据、项目边界和常见误区。
如何合并两个对象类型,使得右类型覆盖左类型但保留未重复的属性? 本文先给出可直接复述的结论,再用最小代码说明类型层面合并两个对象类型并覆盖的工作方式、判断依据、项目边界和常见误区。
Omit 工具类型是如何基于 Pick 和 Exclude 实现的? 本文先给出可直接复述的结论,再用最小代码说明Omit 基于 Pick 和 Exclude 的实现的工作方式、判断依据、项目边界和常见误区。
Parameters 和 ReturnType 工具类型是如何用 infer 实现的?它们适用于函数类型吗? 本文先给出可直接复述的结论,再用最小代码说明Parameters 与 ReturnType 的 infer 实现原理的工作方式、判断依据、项目边界和常见误区。
如何用映射类型手动实现 Pick、Exclude 和 Record?它们的关键差异在哪? 本文先给出可直接复述的结论,再用最小代码说明映射类型手写实现 Pick Exclude Record的工作方式、判断依据、项目边界和常见误区。
如何用类型运算符实现从元组类型中移除最后一个元素的效果? 本文先给出可直接复述的结论,再用最小代码说明类型层面实现元组移除最后一个元素的工作方式、判断依据、项目边界和常见误区。
如何利用 infer 从对象类型中提取某个属性的类型(如属性值的类型)? 本文先给出可直接复述的结论,再用最小代码说明infer 提取对象属性值类型的工作方式、判断依据、项目边界和常见误区。
在条件类型中使用递归来解析字符串(如将 '1+2' 类型计算为 3)时需要注意哪些限制? 本文先给出可直接复述的结论,再用最小代码说明递归条件类型解析字符串的限制的工作方式、判断依据、项目边界和常见误区。
递归类型是如何通过接口或类型别名定义的?JS 的递归思维有何不同 本文先给出可直接复述的结论,再用最小代码说明TypeScript 递归类型定义方式的工作方式、判断依据、项目边界和常见误区。