Próbuję wykonać rzutowanie w moim kodzie z treści żądania w trybie ekspresowym (przy użyciu oprogramowania pośredniczącego z parserem treści) do interfejsu, ale nie wymusza to bezpieczeństwa typów.
To jest mój interfejs:
export interface IToDoDto {
description: string;
status: boolean;
};
Oto kod, w którym próbuję wykonać rzut:
@Post()
addToDo(@Response() res, @Request() req) {
const toDo: IToDoDto = <IToDoDto> req.body; // <<< cast here
this.toDoService.addToDo(toDo);
return res.status(HttpStatus.CREATED).end();
}
I wreszcie wywoływana metoda usługi:
public addToDo(toDo: IToDoDto): void {
toDo.id = this.idCounter;
this.todos.push(toDo);
this.idCounter++;
}
Mogę przekazać dowolne argumenty, nawet takie, które nie są bliskie dopasowania definicji interfejsu , a ten kod będzie działał dobrze. Spodziewałbym się, że jeśli rzutowanie z treści odpowiedzi na interfejs nie jest możliwe, wyjątek zostanie wyrzucony w czasie wykonywania, jak Java lub C #.
Wyczytałem, że w rzutowaniu TypeScript nie istnieje, tylko Asercja typu, więc tylko powie kompilatorowi, że obiekt jest typu x
, więc ... Czy się mylę? Jaki jest właściwy sposób egzekwowania i zapewnienia bezpieczeństwa typu?