[ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug

news/2025/2/24 18:57:16

版本号

"typescript": "^5.7.3",
"unplugin": "^2.2.0",

说明

在使用 unplugin 时 , 我定义插件的参数是 必填的,
使用时却是一个可空参数, 不传参也不会报错,
(options?: UserOptions) => Return
😲😲😲 怎么突然冒出来个问号…
看源码, 发现是这样定义的类型

typescript">type UnpluginFactoryOutput<UserOptions, Return> =
    undefined extends UserOptions
    ? (options?: UserOptions) => Return  // UserOptions 允许 undefined
    : (options: UserOptions) => Return;
// 使用
let a: UnpluginFactoryOutput<{ my_name: string } | undefined, boolean>
let b: UnpluginFactoryOutput<{ my_name: string }, boolean>

现在变量 ba 结果一模一样,
都是可空参数 options?: UserOptions,
说明 不指定 undefined , 它也认为我指定了 undefined
😲😲😲

解决方案

想要 undefined extends UserOptions 可以正确判断两种情况,
必须在 ts 配置文件中设置 "strictNullChecks": true

如果 未启用 strictNullChecks ( 默认是 false ),
ts 认为 undefined 可赋值给 所有类型,
就会出现上面的错误情况


http://www.niftyadmin.cn/n/5864723.html

相关文章

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention&#xff08;GQA&#xff09;详解 Grouped-Query Attention&#xff08;GQA&#xff09; 是 Multi-Query Attention&#xff08;MQA&#xff09; 的改进版&#xff0c;它通过在 多个查询头&#xff08;Query Heads&#xff09;之间共享 Key 和 Value&am…

常见的“锁”有哪些?

悲观锁 悲观锁认为在并发环境中&#xff0c;数据随时可能被其他线程修改&#xff0c;因此在访问数据之前会先加锁&#xff0c;以防止其他线程对数据进行修改。常见的悲观锁实现有&#xff1a; 1.互斥锁 原理&#xff1a;互斥锁是一种最基本的锁类型&#xff0c;同一时间只允…

软件工程中涉及的多种图表

软件工程中涉及多种图表&#xff08;Diagram&#xff09;&#xff0c;它们用于不同阶段的需求分析、系统设计、实现和维护。以下是常见的图表类型及其之间的转化关系&#xff1a; 一、主要图表分类 1. 需求分析阶段 用例图&#xff08;Use Case Diagram&#xff09; 描述系统…

基于SpringBoot的校园消费点评管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

TCP半连接、长连接

在 TCP 三次握手的时候&#xff0c;Linux 内核会维护两个队列&#xff0c;分别是&#xff1a; 半连接队列(SYN 队列)全连接队列(accept 队列) 服务端收到客户端发起的 SYN 请求后&#xff0c;内核会把该连接存储到半连接队列&#xff0c;服务端收到第三次握手的 ACK 后&#x…

钉钉快捷免登录 通过浏览器打开第三方系统,

一、钉钉内跳转至浏览器的实现 使用钉钉JSAPI的跳转接口 在钉钉内通过dd.biz.navigation.openLink方法强制在系统浏览器中打开链接。此方法需在钉钉开发者后台配置应用权限&#xff0c;确保应用具备调用该API的资格37。 示例代码&#xff1a; dd.ready(() > {dd.biz.navigat…

vscode@右键文件夹或文件vscode打开一键配置

文章目录 abstract一键脚本在线下载代码并运行说明备用源码 abstract 有两大类方法:用vscode安装包重新安装,在双击安装包后勾选上相关选项(添加右键vscode打开菜单)另一类是你不想重新安装,现在也可以很方便的一键配置(还可以完成一定的自定义设置,比如菜单名称) 一键脚本 …

Unity VRoid+Blender+Unity 3D人物模型导入使用

Unity VRoid模型导出VRM后,经Blender导出FBX格式, 再放入Unity中调整的全过程实操 实在没有最新的解决方案,只能参考老视频教程 VRoid (.vrm) 导入Blender导入Unity和动画 详解全流程_哔哩哔哩_bilibili 诸多尝试后,整理出必要的软件版本搭配如下: VRoid: 由于导出的VRM模型…