TypeScript - это просто печатный слой javascript.Таким образом, вы не можете волшебным образом преобразовать одно значение в другое, просто определив типизацию.Вы действительно должны жестко закодировать типы.В вашем случае:
getMessages(): Observable<Message[]> {
return this.restService.get('/message/list/' + this.owner).pipe(
map((messages) => messages.map((message) => ({
...new Message(), ...message, ...{
ID: parseInt(message.ID),
senderID: parseInt(message.senderID),
receiverID: parseInt(message.receiverID),
marked: message.marked === '1'
}
}))
)
}
Это гарантирует, что возвращаемый объект действительно является массивом класса Message.Вы также можете подумать об использовании специальных декораторов, которые гарантируют, что при создании класса вы получите правильный тип:
export class Message {
@IsNumber()
ID: number;
mode: string;
@IsNumber()
senderID: number;
@IsNumber()
receiverID: number;
@IsBoolean()
marked: boolean;
subject: string;
}
Есть некоторые сторонние библиотеки, которые вы можете использовать для этого, или просто реализуйте их самостоятельно.
Вы можете изменить вышеуказанный код на:
messages.map((message) => ({...new Message(), ...message))