TypeScript中如何正确访问可能不存在的对象属性
解决方案
你可以通过以下几种更简单高效的方式实现需求,无需额外转Map:
方案1:使用in运算符类型收窄(最推荐,完全类型安全)
TypeScript 原生支持in运算符的类型收窄能力,会自动识别当flag属性存在时对应的类型分支,无额外运行时代价,也不需要手动断言:
function flagArrayToBooleanArray(arr: Array<{ value: string } | { value: string; flag: true }> = [{ value: "" }, { value: "", flag: true }]) { return arr.map(obj => 'flag' in obj ? obj.flag : false); }
方案2:类型断言手动标注属性
如果你明确要沿用原生JavaScript的属性访问逻辑,可以通过类型断言告知TypeScript该对象可能存在flag属性:
function flagArrayToBooleanArray(arr: Array<{ value: string } | { value: string; flag: true }> = [{ value: "" }, { value: "", flag: true }]) { return arr.map(obj => (obj as { flag?: boolean }).flag ?? false); }
如果不需要保留类型校验,也可以直接断言为any跳过所有类型检查:
function flagArrayToBooleanArray(arr: Array<{ value: string } | { value: string; flag: true }> = [{ value: "" }, { value: "", flag: true }]) { return arr.map(obj => (obj as any).flag ?? false); }
注:你当前使用的转Map方案虽然可行,但会产生额外的对象遍历、Map实例化开销,对于简单的属性访问场景没有必要。
内容的提问来源于stack exchange,提问作者afiori
相关产品推荐
相关产品推荐

