【发布时间】:2017-10-09 05:24:49
【问题描述】:
我正在尝试将我的代码从 express 中的请求主体(使用主体解析器中间件)转换为接口,但它没有强制执行类型安全。
这是我的界面:
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 强制转换不存在,只有类型断言,所以它只会告诉编译器一个对象的类型是x,所以......我错了吗?执行和确保类型安全的正确方法是什么?
【问题讨论】:
-
请定义“它不工作”。要精确。有错误吗?哪一个?在编译时?在运行时?会发生什么?
-
在运行时,无论我传递什么对象,代码都会正常执行。
-
不清楚你在问什么
-
我的问题是如何将传入的对象转换为类型化的对象。如果无法进行强制转换,请在运行时抛出异常,如 Java、C#...
-
这能回答你的问题吗? TypeScript or JavaScript type casting
标签: object typescript interface casting