
Roman
04.12.2016
19:50:48
да, уличная магия по ходу какая-то

Vasiliy
04.12.2016
19:50:57
ну вот я целое число даю ему
судя по тому, что написано в ридми это должно работать

Roman
04.12.2016
19:51:18
но не работает

Google

Vasiliy
04.12.2016
19:51:19
foo(2) // flow ok, tcomb ok
да, дичь какая-то)
Тслинт
а вот этим не пользуешься? https://github.com/Microsoft/vscode-chrome-debug

Vladimir
04.12.2016
20:36:00

Roman
04.12.2016
20:36:18
а статически нет?

Vladimir
04.12.2016
20:36:30
нет, в том и суть
этого плагина

Roman
04.12.2016
20:37:08
просто он пишет
foo(2) // flow ok, tcomb ok
а флоу не ок как бы

Vladimir
04.12.2016
20:37:23
да, это странно

Котяй Негодяй
04.12.2016
20:37:26
Этот ваш flow — боль.
У него какое-то странное представление о covsrage. Скажите, там всё ок? Есть баги?

Google

Vladimir
04.12.2016
20:38:12
В coverage?

Котяй Негодяй
04.12.2016
20:38:26
flow coverage

Vladimir
04.12.2016
20:38:35

Котяй Негодяй
04.12.2016
20:38:49
Ну, он мне писал, что у меня одно выражение непокрыто.
А там ВСЁ покрыто. Там и покрывать-то нечего.

Vladimir
04.12.2016
20:39:10
Скорее если баг и есть, то не в coverage

Котяй Негодяй
04.12.2016
20:40:03
Ну, с такими аномалиями вообще кто-то сталкивался? А то я не знаю — продолжать плясать с бубном, или искать причину вовне.

Vladimir
04.12.2016
20:40:22
Да, такое бывает
Можно попробовать поискать причину
Но если не охота, то просто ограничиваешь распространение проблемы аннотацией
Если кинешь фрагмент кода, то может что еще можно будет сказать

Котяй Негодяй
04.12.2016
20:43:00
А вообще, хорошая практика — покрывать всё-всё-всё? Или не обязательно? Просто flow сам неплохо всё обсчитывает, и здравый смысл подсказывает, что можно ограничивать только аргументы и return.

Vladimir
04.12.2016
20:43:40
Лишних аннотаций лучше не добавлять
В локальных функциях и классах они чаще всего вообще не нужны, но тут их можно использовать по вкусу
coverage никак не связан с аннотациями

Котяй Негодяй
04.12.2016
20:44:40
Вот тут не понял.

Vladimir
04.12.2016
20:45:30
coverage - это процент выражений, у которых определен конкретный тип (не any или empty)
Можно иметь 100% coverage без единой аннотации
За счет type inference

Google

Vladimir
04.12.2016
20:46:38
Аннотации помогает с coverage в ситуации, когда уже есть выражение с any

Котяй Негодяй
04.12.2016
20:46:54
То бишь, coverage — процент выражений, которые flow вообще сможет определить?

Vladimir
04.12.2016
20:47:19
Процент нетипизированных выражений, грубо говоря

Котяй Негодяй
04.12.2016
20:48:18
Так. И за 100% coverage гнаться в принципе не стоит, а нужно просто делать check и всё?

Vladimir
04.12.2016
20:48:49
Нет, за 100% coverage гнаться стоит, но это не значит что нужно добавлять аннотации без разбору
Нужно смотреть, откуда появляется any и либо решать проблему на корню, либо ставить аннотацию как можно ближе к источнику проблемы

Котяй Негодяй
04.12.2016
20:49:52
Тогда вот думаю — нормальная практика реджектить коммит без 100% coverage?

Vladimir
04.12.2016
20:50:11
Нет, во многих кейсах 100% недостижимо

Котяй Негодяй
04.12.2016
20:51:01
Типа там, где много нетипизированных зависимостей, аннотирование которых займёт много времени?

Vladimir
04.12.2016
20:51:31
Нет, это пример когда можно достичь 100%
Самый простой пример - try catch
Ошибка в catch будет всегда непокрыта

Котяй Негодяй
04.12.2016
20:52:04
Оу... Почему?

Vladimir
04.12.2016
20:52:57
Для нее безопасным типом является только mixed, но для соответсвия реальным практикам js ее сделали any
Аннотация прямо в catch не поддерживается, к сожалению

Котяй Негодяй
04.12.2016
20:53:35
А, даже так.
Ну, так-то, в теории, я вполне могу описать, что может вернуться.

Aleh
04.12.2016
20:54:03

Vladimir
04.12.2016
20:54:42
Да, но с учетом интеропреабилити с обычным js все равно буду косяки

Aleh
04.12.2016
20:55:03

Google

Vladimir
04.12.2016
20:55:46
Ну ошибка в либе, ошибка в тайпинге и т д

Котяй Негодяй
04.12.2016
20:55:51
У меня есть практика и свои исключения создавать, перехватывая всё, что можно, на самом нижнем уровне кода.

Aleh
04.12.2016
20:56:07

Vladimir
04.12.2016
20:56:26
Ну, отчасти да
Но например может RefernceError из либы всплыть
Или что то такое
В джаве такое тоже есть, но там catch указывает класс

Котяй Негодяй
04.12.2016
20:57:21

Admin
ERROR: S client not available

Vladimir
04.12.2016
20:57:49
Ну это означается что в каждом catch нужно проверять на все такие типы

Aleh
04.12.2016
20:57:57

Vladimir
04.12.2016
20:58:20
Иногда сахарок все меняет

Котяй Негодяй
04.12.2016
20:58:23
Это было бы логично. Ошибка — это объект. В общем-то, его структура заранее почти всегда известна.

Vladimir
04.12.2016
20:58:52
> @bigslycat
В общем-то, его структура заранее почти всегда известна.
Ну, не с точки зрения строгого статического анализатора

Aleh
04.12.2016
20:58:54

Котяй Негодяй
04.12.2016
20:59:15

Aleh
04.12.2016
20:59:26
Я согласен, но так можно

Котяй Негодяй
04.12.2016
20:59:49
Если делаешь throw, создавай экземпляр ошибки или своего класса, наследованного от ошибки.

Aleh
04.12.2016
21:00:09
Только заранее реши проблему наследования от ошибки ))

Google

Котяй Негодяй
04.12.2016
21:00:20

Aleh
04.12.2016
21:01:27
Ачотам?
http://stackoverflow.com/questions/31089801/extending-error-in-javascript-with-es6-syntax

Vladimir
04.12.2016
21:02:23
Мне кажется это должно работать из коробки

Котяй Негодяй
04.12.2016
21:02:40

Vladimir
04.12.2016
21:03:25
Да, все работает

Nikita
04.12.2016
21:03:41

Vladimir
04.12.2016
21:03:56
Наследование встроенных классов долго было в сломанном состоянии

Nikita
04.12.2016
21:04:01
понятно, что error: any, но можно же дальше обязать делать проверки через coverage

Vladimir
04.12.2016
21:04:22
Ну оно либо any либо mixed
Если any, то проверки не нужны

Nikita
04.12.2016
21:05:16
не, для catch-блока, имею ввиду

Vladimir
04.12.2016
21:05:36
все равно не понял

Nikita
04.12.2016
21:07:38
try {
foo();
} catch (e) {
if (typeof e === 'string') {
console.log(e);
}
}
имеем код, чисто теоретически в нем не будет ошибок из-за типов
хочется чтобы coverage в данном случае был 100%

Котяй Негодяй
04.12.2016
21:08:17
Ну костыль же.

Nikita
04.12.2016
21:08:24
почему костыль?

Vladimir
04.12.2016
21:08:25
ну так не может быть логически
потом что e - any

Nikita
04.12.2016
21:08:44
понятно, что e - any