【发布时间】:2019-06-13 05:00:05
【问题描述】:
措辞不好的问题,我不知道该怎么问。
我有一个评估从远程服务器接收到的数据的条件。如果不为 false,则它包含一个对象。
interface serverData {
data: boolean|{a: number, b: string, c: number, d: string},
extra: boolean,
}
getRemoteData(): serverData {
return {
"extra": false,
"data": {
a: 15460514569,
b: "mia6bahBai",
c: 2019,
d: 'Lorem Ipsum'
}
}
}
dothings() {
var response = this.getRemoteData()
if(response.data !== false) { // check if type is serverData or false
let obj = new Data(response.data) // Expect serverData
}
}
出于开发目的,response.data 返回一个静态对象,但最终可能返回 false。
打字稿抱怨:
'true | 类型的参数{ 一个号码; b:字符串; c:号码; d: 细绳; }' 不可分配给“serverData”类型的参数。类型 'true' 不能分配给类型 'serverData'..
Typescript 让我很紧张。我有一个条件来减轻错误并根据收到的数据做正确的事情。 typescript 对我有什么期望?
【问题讨论】:
-
我认为
data的类型是boolean | { a: number; b: string; c: number; d: string; },也就是false | true | { a: number; b: string; c: number; d: string; },所以你的支票只是从联合中排除了假。试试typeof response.data !== 'boolean' -
显然该值最初是一个布尔值或那个对象。你只是排除了错误,所以它仍然可能是真的。没有更多的上下文,很难说你应该如何解决这个问题。为什么是假而不是例如空?
-
@HypeWolf 如果您的服务器返回
false | {},那么是的,这将是最好的解决方案。如果它也可以返回true,那么我建议的第一个检查就可以完成这项工作 -
null或undefined会不会更适合不存在的对象? -
我同意在大多数情况下应避免使用
null,因为它是空引用异常的常见原因,但null有有效的用例。但是,我认为使用null比试图将对象的存在与对象本身混为一谈更可取。
标签: typescript typescript-typings