typescript - 如何做一个深型后卫?
问题描述
我有以下类型:
type Child = {
foo: number | null
}
type Parent = {
child: Child | null
}
我想制作一个类型保护,接收Parent
作为参数并确定是否foo
是一个数字......类似于:
const guard = (parent: Parent): parent?.child?.foo is number => {
return isNumber(parent?.child?.foo)
}
我希望 TS 现在能够推断出parent.child
不为空 - 这可能吗?
解决方案
你必须把它拼出来,例如:
const guard = (parent: Parent): parent is {child: {foo: number}} => {
return isNumber(parent?.child?.foo);
};
您可以使用交集类型来做到这一点,如下所示:
const guard = (parent: Parent): parent is Parent & {child: Child & {foo: number;};} => {
return isNumber(parent?.child?.foo);
};
(你总是可以为它定义一个类型而不是一个内联交集。)
推荐阅读
- php - 如何使用 CodeIgniter 中的下拉列表在 HTML 表中显示过滤后的数据库值?
- android - 每次我尝试登录时,它都会显示我的身份验证失败或 createUserWithEmail:onComplete 我只是无法让它发挥作用
- javascript - TypeError:无法读取未定义的属性“位置”
- kubernetes - 创建 cockroach db 每日备份到 kubernetes 到 GCP 存储的脚本
- php - 光滑的滑块不改变活动的幻灯片位置
- visual-studio-2015 - Azure DevOps Build - 发布时不会在 bin 文件夹中创建 .compiled 文件
- php - 在codeigniter的自定义函数中使用不等于
- html - 使用 NVDA 工具悬停鼠标时的可访问性问题
- r - 从 R 中的 xy 图中检索颜色值
- swift - 继承托管对象