我遇到一种情况,我觉得打字稿没有正确缩小给定类型。
(value: number[] | null) => {
if ((value?.length ?? 0) > 0) value[0];
};
在if
分支中,即使Object is possibly 'null'
为value
时条件不成立,它仍然给我一个null
。
这不应该缩小范围,为什么是/否?
如果这是预期的行为,是否有便捷的解决方法?
答案 0 :(得分:1)
不是完整的答案,但:
之所以发生这种情况,是因为您没有直接检查null / undefined的信息,而TS本身也不聪明。
您必须选择:
1。更详细但更安全:
像这里一样使用支票:
(value: number[] | null) => {
if (value ==null && value.length > 0) value[0];
};
或带有类似此处的字体保护符
(value: number[] | null) => {
if (!isnull(value) && value.length > 0) value[0];
};
function isnull(value: any): value is null {
return value == null;
}
2。确定人员的选择:
说TS:我确定只是这样做并使用!符号。就像这里:
(value: number[] | null) => {
if (value?.length ?? 0 > 0) value![0];
};
希望这会有所帮助