Я, кажется, неправильно понимаю, как работают улучшения потока (или, может быть, моя установка Nuclide/Atom + Flow тупой). Я хотел бы сделать что-то вроде следующего:Тип уточнения типа `any` в методе потока
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.")
}
}
Я извлечение некоторые JSON из API конечной точки, и она имеет тип any
. Я хотел бы проверить, что он имеет правильную форму (например, он имеет строку ip
). Нуклид, однако, предупреждает меня, что каждое использование json
в приведенном выше коде «Не покрывается потоком», включая все выражение json.ip
. Почему это? Я бы ожидал, что проверка typeof
уточнит тип json.ip
по номеру string
.
Есть ли другой способ для уточнения нетипизированных значений?
Редактировать: Вот tryflow example того, что я вижу.
Не могли бы вы уточнить, что вы видите? Если это «любой», тогда код будет хорош даже без уточнения. – loganfsmyth
Уверенный: Нуклид помещает желтую «раскрытую Flow» в подстроку под 'json',' wait resp.json() 'и' json.ip', даже внутри ветви 'return json.ip' условного. Насколько я могу судить, Flow не уточняет 'json.ip'' string'; например Я могу написать 'json.ip * 2' без получения ошибки потока. –
А я тоже считаю, что использую версию 0.37.4. –