如何在不使用非空断言与可选链的情况下消除‘Object is possibly undefined’错误
解决TypeScript中
'input.conditional' is possibly 'undefined'错误 你遇到的问题根源在于:FormItemDataType里的conditional是可选属性(带?标记),TypeScript对这类属性的类型推断是ConditionalItemDataType | undefined。而'conditional' in input这个类型守卫只能确认对象上存在该属性,但无法排除属性值为undefined的情况,所以TypeScript依然会认为input.conditional可能是undefined。
要解决这个问题,你需要在类型守卫中同时确认input.conditional的值不为undefined,修改后的代码如下:
const func = (input: FormItemDataType) => { if ('conditional' in input && input.conditional !== undefined) { input.conditional.filter((arrItem) => console.log(arrItem)); } else null; };
补充说明
如果你的业务场景中,conditional属性存在时一定是有效的数组(不会出现存在但值为undefined的情况),也可以简化判断逻辑,直接检查值是否为真值:
const func = (input: FormItemDataType) => { if (input.conditional) { input.conditional.filter((arrItem) => console.log(arrItem)); } else null; };
不过要注意:这种方式会把空数组[]也判定为假值,如果你的业务允许空数组执行后续逻辑,建议还是用第一种明确判断!== undefined的方式。
内容的提问来源于stack exchange,提问作者moys
相关产品推荐
相关产品推荐

