如何制作深型护板?
How to make a deep type guard?
我有以下类型:
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);
};
(您始终可以为其定义类型而不是内联交集。)
我有以下类型:
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);
};
(您始终可以为其定义类型而不是内联交集。)