我有这样的代码:
socket.emit(ClientActions.LOAD_GAME_STATE, (response: GameState | ErrorResponse) => {
// use response
});
问题是,如果我试图访问GameState对象上的属性,它会不出所料地给我一个错误,因为这些属性在ErrorResponse类型上不存在。
我该如何表达响应可能是数据或错误,并相应地输入和使用它?有推荐的方法吗?
我有这样的代码:
socket.emit(ClientActions.LOAD_GAME_STATE, (response: GameState | ErrorResponse) => {
// use response
});
问题是,如果我试图访问GameState对象上的属性,它会不出所料地给我一个错误,因为这些属性在ErrorResponse类型上不存在。
我该如何表达响应可能是数据或错误,并相应地输入和使用它?有推荐的方法吗?
2条答案
按热度按时间hpcdzsge1#
这是推荐的输入方式,要将类型缩小到success或error,应该使用if语句作为类型保护:
cclgggtu2#
对于更具内聚性和可扩展性的类型,我建议如下(具体取决于您的实现)
你的原始代码会变成
我认为这个解决方案将允许您最灵活地添加许多新类型的响应类型,同时以一致的、直观类型化的方式处理错误。