当前位置: 首页 > news >正文

第十节 高频代码题-类型推断题

⚙️ 一、基础类型推断题

​题目 1:变量初始化推断​

let a = 42;
const b = "hello";
let c = true;

​答案与解析​​:

  • a 被推断为 numberlet 声明允许重新赋值为同类型数字)
  • b 被推断为字面量类型 "hello"const 声明固定值,无类型拓宽)
  • c 被推断为 boolean(基础类型推断)

🧩 二、复合类型推断题

​题目 2:数组与对象推断​

const arr = [1, "text", null];
const obj = { name: "Alice", score: 95 
};

​答案与解析​​:

  • arr 被推断为 (number | string | null)[]
    • ​最佳公共类型​​:自动推导兼容所有元素的联合类型
  • obj 被推断为 { name: string; score: number }
    • ​对象字面量推断​​:根据属性初始值精确推导类型

🔄 三、函数类型推断题

​题目 3:函数参数与返回值推断​

const add = (a: number, b: number) => a + b;
const users = ["Alice", "Bob"].map(user => user.toUpperCase());

​答案与解析​​:

  1. add 返回值被推断为 number(表达式 a + b 操作数均为 number
  2. users 被推断为 string[]
    • 回调函数 user => user.toUpperCase() 中:
      • user 根据数组元素推断为 string(上下文类型推断)
      • 返回值 user.toUpperCase() 返回 string

🎯 四、上下文类型推断题

​题目 4:事件处理器参数推断​

window.addEventListener("click", e => {console.log(e.clientX);
});

​答案与解析​​:

  • e 被推断为 MouseEvent
    • ​上下文驱动​​:根据 addEventListener 的泛型签名自动匹配事件类型
    • 无需显式声明,避免冗余类型注解

⚖️ 五、联合类型与字面量题

​题目 5:联合类型与字面量收缩​

let value: number | string = Math.random() > 0.5 ? 42 : "42";if (typeof value === "string") {value.toUpperCase(); // 此处 value 类型是什么?
}

​答案与解析​​:

  • 外层 value 被推断为 number | string(联合类型)
  • if 块内被收窄为 string
    • ​控制流分析​​:typeof 守卫触发类型收窄
    • 可安全调用 .toUpperCase()(仅 string 可用)

💡 六、进阶技巧题

​题目 6:泛型推断与条件类型​

type IsString<T> = T extends string ? true : false;
type A = IsString<"hello">; // A 的类型?
type B = IsString<number>;  // B 的类型?

​答案与解析​​:

  • A 被推断为字面量类型 true
  • B 被推断为字面量类型 false
    • ​条件类型分发​​:根据 T 是否满足 extends string 返回不同字面量

✅ 高频考点总结

​场景​​核心规则​​典型题号​
变量初始化let 拓宽类型,const 不拓宽1
数组/对象推断最佳公共类型 + 属性推导2
函数上下文参数/返回值表达式推断 + 上下文类型3, 4
类型收窄typeof/instanceof 守卫5
泛型与条件类型类型分发 + 字面量返回6

💡 ​​避坑指南​​:

  • 空数组初始化 let arr = [] 会推断为 any[](需显式注解)
  • 函数无返回值时推断为 void(非 undefined
  • 启用 strictNullChecks 后,未初始化变量可能推断为 undefined
    深入练习可参考 TypeScript Playground 实时验证类型推断结果。
http://www.xdnf.cn/news/1008361.html

相关文章:

  • 硬件工程师成长之路--电容
  • 在GIS 工作流中实现数据处理(3)
  • 25年春招:携程java开发一面
  • linux使用find搜索文件命令
  • VUE - AxiosError-ERR_BAD_REQUEST
  • 瓷器数字化展示文物三维扫描建模-中科米堆
  • 2025年6月英语六级作文高分模板目录(共20篇)
  • ssc377d在kernel下读写寄存器
  • 进程间通信之消息队列
  • 大厂机试题解法笔记大纲+按知识点分类+算法编码训练
  • Coze搭建工作流
  • DWS层新增指标处理方案
  • 工程项目管理软件选型指南:核心功能、技术架构与行业实践
  • 获取分布式锁
  • 医院部署IBMS系统时,哪些关键因素需要重点权衡与规划
  • 【C语言】*与深层理解
  • 【Vue3/Typescript】从零开始搭建H5移动端项目
  • 【二分模版------左闭右闭】
  • Vue ⑨-Pinia
  • c++ - 关于 string 的练习题
  • 《深度剖析:Java中用Stanford NLP工具包优化命名实体识别》
  • Redis哨兵机制
  • 获取Unity节点路径
  • ✅ [Dify]明道云同步内容到 Dify 知识库的最佳实践指南
  • 电梯钢带安全无盲区:电梯钢带断丝智慧监测方案让隐患“毫秒现形“
  • SpringCloud-seata集成到nacos
  • 实战二:基于网页端实现与大模型的问答交互
  • 虚拟 DOM Diff 算法详解
  • UE5场景漫游——鼠标控制旋转与第一人称漫游
  • 51la批量创建站点繁琐?悟空统计一站式高效解决方案