Angular自定义Pipe使用时报Cannot convert undefined or null to object错误
报错原因
- TypeScript 中函数参数的默认值仅在入参为
undefined时生效,你用到了可选链companies?.officers,当companies为null/undefined时,表达式返回null,会直接传入 Pipe,不会触发你设置的[]默认值。 Object.values()方法仅接受对象类型的入参,传入null/undefined时就会抛出Cannot convert undefined or null to object的错误。- 补充:Angular 模板中可选链优先级高于管道符,你写的
companies?.officers | valueArray执行顺序为(companies?.officers) | valueArray,确实会把空值传入 Pipe。
解决方案
推荐优先修改 Pipe 的兼容逻辑,无需调整模板代码,适配性更高:
import {Pipe, PipeTransform} from '@angular/core'; @Pipe({ name: 'valueArray', }) export class ValueArrayPipe implements PipeTransform { transform(objects: any): any { // 入参为空时直接返回空数组,兼容null/undefined两种场景 if (!objects) return []; return Object.values(objects); } }
如果你不想修改 Pipe 代码,也可以直接调整模板的传参逻辑,做空值兜底:
<!-- 空值时传入空对象,Object.values({})返回空数组不会报错 --> <mat-tab *ngFor="let officer of (companies?.officers ?? {}) | valueArray" label="{{officer.name}}">
内容的提问来源于stack exchange,提问作者Agata
相关产品推荐
相关产品推荐

