フロータイプのリファインメントがどのように機能するかを誤解しているようです (または、私の 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
全体を含め、上記のコードで を使用するたびに「フローでカバーされていない」と警告していjson.ip
ます。何故ですか?typeof
チェックが to の型を絞り込むことを期待していたでしょjson.ip
うstring
。
型指定されていない値を絞り込む別の方法はありますか?
編集:これは、私が見ているもののtryflowの例です。