我似乎误解了flowtype细化是如何工作的(或者我的Nuclide / Atom + Flow设置可能是愚蠢的)。我想做类似以下的事情:
async function getIp(): Promise<string> {
const resp = await fetch('https://httpbin.org/ip')
const json = await resp.json() // `json: any` at this point
if (typeof json.ip === 'string') {
return json.ip
} else {
throw new Error("Weird response.")
}
}
我从API端点获取一些JSON,它的类型为any
。我想要理智地检查它是否具有正确的格式(例如,它具有字符串ip
字段)。然而,Nuclide警告我在上面的代码中json
的每次使用都是&#34;不包含在流&#34;中,包括整个json.ip
表达式。这是为什么?我希望typeof
检查可以将json.ip
的类型细化为string
。
还有另一种方法可以改进非类型值吗?
编辑:这是我所看到的tryflow example。
答案 0 :(得分:3)
不,你无法改进any
。你已经可以用它做任何事了,那有什么意义呢?
如果您希望Flow验证您的代码,您应立即将any
转换为mixed
:
const json: mixed = await resp.json()