当我需要将项目推送到接口的属性之一时,无法读取未定义的属性'push'



我有这个型号:

export interface AddAlbumeModel {
name: string;
gener: string;
signer: string;
albumeProfile:any;
albumPoster:any;
tracks:TrackMode[];
}
export interface TrackMode {
trackNumber: number;
trackName: string;
trackProfile: any;
trackPoster:any;
trackFile: any;
}

我想添加带有以下代码的tracks

let addModel = {} as AddAlbumeModel;
for (let index = 0; index < this.addAlbumFG.controls['tracks']['controls'].length; index++) {
const item= this.addAlbumFG.controls['tracks']['controls'][index]['controls'];
addModel.tracks.push({
trackFile:item.trackFile.value['files'][0],
trackNumber:item.trackNumber.value,
trackName:item.trackName.value,
trackPoster:item.trackPoster.value['files'][0],
trackProfile:item.trackProfile.value['files'][0]
})
}

但它向我展示了这个错误:

错误类型错误:无法读取未定义的属性"push">

如何解决此问题

Hi下面的错误是因为您没有声明可用为数组:

错误类型错误:无法读取未定义的属性"push">

先做:

let addModel = {} as AddAlbumeModel;
addModel.tracks = [];
for (let index = 0; index < this.addAlbumFG.controls['tracks']['controls'].length; 
index++) {
const item= this.addAlbumFG.controls['tracks']['controls'][index]['controls'];
addModel.tracks.push({
trackFile:item.trackFile.value['files'][0],
trackNumber:item.trackNumber.value,
trackName:item.trackName.value,
trackPoster:item.trackPoster.value['files'][0],
trackProfile:item.trackProfile.value['files'][0]
})
}

现在完成:(

由于属性tracks未定义,上述操作失败。在typescript中,接口仅用于类型检查,在代码转换为JavaScript后,接口将丢失。

这里有几个解决方案:

使用前初始化属性

你可以做的一件事是在使用之前初始化音轨

interface TrackMode {
// props
}
interface AddAlbumeModel {
// other props
tracks: TrackMode[];
}
let addModel: AddAlbumeModel = {
tracks: []
} as AddAlbumeModel;
addModel.tracks.push(...)

使用类而不是接口

接口不能有默认值,但类可以,因此可以使用类,并将tracks的默认值设置为空数组。

interface TrackMode {
// props
}
class AddAlbumeModel {
// other props
tracks: TrackMode[] = [];
}
const addModel = new AddAlbumeModel()
addModel.tracks.push(...)

最新更新