类型细化 flowtype 中的“任何”类型
Type refining an `any` type in 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
都是 "Not covered by flow",包括整个 json.ip
表达式。这是为什么?我本以为 typeof
检查会将 json.ip
的类型细化为 string
。
是否有另一种方法来优化未类型化的值?
编辑:这是我所看到的tryflow example。
不,您无法优化 any
。你已经可以用它做任何事情了,那还有什么意义呢?
如果您希望 Flow 验证您的代码,您应该立即将您的 any
转换为 mixed
:
const json: mixed = await resp.json()
我似乎误解了流类型优化的工作原理(或者我的 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
都是 "Not covered by flow",包括整个 json.ip
表达式。这是为什么?我本以为 typeof
检查会将 json.ip
的类型细化为 string
。
是否有另一种方法来优化未类型化的值?
编辑:这是我所看到的tryflow example。
不,您无法优化 any
。你已经可以用它做任何事情了,那还有什么意义呢?
如果您希望 Flow 验证您的代码,您应该立即将您的 any
转换为 mixed
:
const json: mixed = await resp.json()