Estou tentando fazer uma conversão em meu código do corpo de uma solicitação em expresso (usando middleware analisador de corpo) para uma interface, mas não está impondo a segurança de tipo.
Esta é minha interface:
export interface IToDoDto {
description: string;
status: boolean;
};
Este é o código onde estou tentando fazer o elenco:
@Post()
addToDo(@Response() res, @Request() req) {
const toDo: IToDoDto = <IToDoDto> req.body; // <<< cast here
this.toDoService.addToDo(toDo);
return res.status(HttpStatus.CREATED).end();
}
E, finalmente, o método de serviço que está sendo chamado:
public addToDo(toDo: IToDoDto): void {
toDo.id = this.idCounter;
this.todos.push(toDo);
this.idCounter++;
}
Posso passar quaisquer argumentos, mesmo aqueles que não chegam perto de corresponder à definição da interface , e este código funcionará bem. Eu esperaria, se a conversão do corpo da resposta para a interface não fosse possível, que uma exceção fosse lançada no tempo de execução como Java ou C #.
Eu li que na conversão de TypeScript não existe, apenas Type Assertion, então isso só dirá ao compilador que um objeto é do tipo x
, então ... Estou errado? Qual é a maneira certa de aplicar e garantir a segurança de tipo?