2016-12-29 2 views
0

Я, кажется, неправильно понимаю, как работают улучшения потока (или, может быть, моя установка 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 того, что я вижу.

+0

Не могли бы вы уточнить, что вы видите? Если это «любой», тогда код будет хорош даже без уточнения. – loganfsmyth

+0

Уверенный: Нуклид помещает желтую «раскрытую Flow» в подстроку под 'json',' wait resp.json() 'и' json.ip', даже внутри ветви 'return json.ip' условного. Насколько я могу судить, Flow не уточняет 'json.ip'' string'; например Я могу написать 'json.ip * 2' без получения ошибки потока. –

+0

А я тоже считаю, что использую версию 0.37.4. –

ответ

3

Нет, вы не можете уточнить, any. Вы уже можете что-то с этим сделать, так в чем смысл?

Если вы хотите Flow, чтобы подтвердить свой код, который вы должны немедленно превратить ваш any в mixed:

const json: mixed = await resp.json() 
+0

Удивительный! Это именно то, чего мне не хватало - похоже, я недостаточно читал потоковые документы. Огромное спасибо! –

Смежные вопросы