重庆网站建设行业新闻网站建设 010
版本号
"typescript": "^5.7.3",
"unplugin": "^2.2.0",
 
说明
在使用 unplugin 时 , 我定义插件的参数是 必填的,
 使用时却是一个可空参数, 不传参也不会报错,
 (options?: UserOptions) => Return
 😲😲😲 怎么突然冒出来个问号…
 看源码, 发现是这样定义的类型
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>
 
现在变量 b 和 a 结果一模一样,
 都是可空参数 options?: UserOptions,
 说明 不指定 undefined , 它也认为我指定了 undefined
 😲😲😲
解决方案
想要 undefined extends UserOptions 可以正确判断两种情况,
 必须在 ts 配置文件中设置 "strictNullChecks": true
如果 未启用 strictNullChecks ( 默认是 false ),
 ts 认为 undefined 可赋值给 所有类型,
 就会出现上面的错误情况
