当为解构后的函数参数设置默认值时,类型收窄会失败
使用TypeScript v6.0.3(也在更早的版本上测试过,最低到v4.9.5)时,我在对以对象形式传入的函数选项的类型进行收窄。某些参数带有默认值。就我所知,带默认值的参数在TypeScript的自动类型推断方面并不能正确工作。
为何在 if 块中,fun1 无法把 t 的类型收窄,而 fun2 却能基于定义正确地收窄其类型?这是个bug吗?
type Type = {
b: false,
t: number,
} | {
b?: true,
t: string,
}
// This doesn't work
function fun1({b = true, t}: Type) {
if(b) {
t /* <-- can't discern type as 'string' only, is 'string|number' */
}
}
// This works
function fun2({b, t}: Type) {
if(b) {
t /* <-- can discern type as 'string' */
}
}
解决方案
这是TypeScript中尚未实现的一个特性/一个bug,当对解构的函数参数新增控制流分析时被提出,并在TypeScript的 GitHub上的一个开放问题中有所描述。
感谢 @MattKantor,在这个问题的一个早期版本中某条注释里提供的相关GitHub链接,那一版本确实包含一个bug。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。