我有这个型号:
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(...)