Saya menggunakan Google Books Api di Angular. Untuk alasan itu saya membuat antarmuka berikut
export interface DateBooks {
kind:string,
totalItems:number,
items:Book[]
}
export interface Book {
kind:string,
id:string,
etag:string,
selfLink:string,
volumeInfo: VolumeInfo[],
saleInfo:SaleInfo,
accessInfo:AccessInfo,
searchInfo:SearchInfo
}
export interface VolumeInfo {
title:string,
subtitle:string,
authors:string[],
publisher:string,
publisedDate:string,
description:string,
industryIdentifiers:IndustryIdentifiers[],
readingModes:ReadingModes,
pageCount:number,
printType:string,
categories:string[],
maturityRating:string,
allowAnonLogging:boolean,
contentVersion:string,
panelizationSummary:PanelizationSummary,
averageRating:number,
ratingCount:number,
imageLinks:ImageLinks,
language:string,
previewLink:string,
infoLink:string,
canonicalVolumeLink:string
}
export interface ImageLinks {
smallThumbnail:string,
thumbnail:string
}
export interface IndustryIdentifiers{
type:string,
identifier:string
}
export interface ReadingModes{
text:boolean,
image:boolean
}
export interface PanelizationSummary{
containsEpubBubbles:boolean,
containsImageBubbles:boolean
}
export interface SaleInfo{
country:string,
saleability:string,
isEbook:boolean
}
export interface AccessInfo{
country:string,
viewability:string,
embeddable:boolean,
publicDomain:boolean,
textToSpeechPermission:string,
epub:Epub,
pdf:Pdf,
webReaderLink:string,
accessViewStatus:string,
quoteSharingAllowed:boolean
}
export interface SearchInfo{
textSnippet:string
}
export interface Epub{
isAvailable:boolean
}
export interface Pdf{
isAvailable:boolean
}
Ini adalah komponen skrip saya
databooks:DateBooks;
books:Book[];
title:string;
constructor(private GoodreadsService:GoodreadsService) { }
ngOnInit(): void {
}
getLibros(libro:string){
this.GoodreadsService.getBooks(libro).subscribe(data=>{
this.databooks=data;
this.books=this.databooks.items;
})
}
Ini, metode getBooks
public getBooks(busqueda:string): Observable<DateBooks>{
return this.http.get<DateBooks>(`https://www.googleapis.com/books/v1/volumes?q=${busqueda}&maxResults=40`);
Dan, ini komponen html
<input type="text" id="namea" name="nameb" required
minlength="4" maxlength="8" size="10" placeholder="introduzca texto" [(ngModel)]="title" (keyup)="getLibros(title) " >
<div *ngFor="let book of books">
<h4 class="prueba">
<p> {{book.volumeInfo['title']}}</p>
<p><img src={{book.volumeInfo.imageLinks.thumbnail}}></p>
</h4>
</div>
Jadi, saya dapat menggunakan antarmuka tanpa masalah dalam html, selain itu jika saya menjalankan dan menulis apa pun di input, halaman akan menampilkan judul buku dan sampul dengan benar. Namun, saya tidak bisa mendapatkan hanya beberapa properti antarmuka di ts. Misalnya, dalam data berlangganan adalah objek yang dikembalikan getBooks, saya dapat menggunakan data.items tanpa masalah, tetapi jika saya menulis data.item.volumeInfo Kode visual mengatakan kesalahan ini: Properti 'volumeinfo' tidak ada pada tipe 'Buku []', tapi saya dapat menggunakannya tanpa masalah di html, saya tidak tahu bagaimana cara memperbaiki masalah ini?.
Bisakah seseorang memberi tahu saya apa masalahnya atau kesalahan saya?