Я пытаюсь выполнить приведение своего кода из тела запроса в экспресс (с использованием промежуточного программного обеспечения парсера тела) в интерфейс, но это не обеспечивает безопасность типов.
Это мой интерфейс:
export interface IToDoDto {
description: string;
status: boolean;
};
Это код, в котором я пытаюсь выполнить приведение:
@Post()
addToDo(@Response() res, @Request() req) {
const toDo: IToDoDto = <IToDoDto> req.body; // <<< cast here
this.toDoService.addToDo(toDo);
return res.status(HttpStatus.CREATED).end();
}
И, наконец, вызываемый метод сервиса:
public addToDo(toDo: IToDoDto): void {
toDo.id = this.idCounter;
this.todos.push(toDo);
this.idCounter++;
}
Я могу передавать любые аргументы, даже те, которые не подходят для соответствия определению интерфейса , и этот код будет работать нормально. Я ожидал, что если приведение тела ответа к интерфейсу невозможно, то во время выполнения, например Java или C #, будет выброшено исключение.
Я читал, что в TypeScript не существует приведения типов, только Type Assertion, поэтому он будет сообщать компилятору только о том, что объект имеет тип x
, так что ... Я ошибаюсь? Как правильно применять и обеспечивать безопасность типов?