
Nikita
07.11.2016
13:48:26
@vkurchatkin а как flow дебажить?
ну то есть я хочу понять, почему flow думает, что в этом месте я ошибся, хочу выяснить, что там за тип, по его мнению. как это сделать?

Sergey
07.11.2016
13:49:44

Nikita
07.11.2016
13:50:26
ну в каких-то случаях да, в каких-то помогает только медитация))

Google

Nikita
07.11.2016
13:51:18
вот думаю автокомплитом попробовать

Sergey
07.11.2016
13:54:04
мб action.payload нулабл?

Nikita
07.11.2016
13:54:28
в некоторых случаях да, но там и P nullable

Vladimir
07.11.2016
13:55:11
ну я просто в нуклиде смотрю
в консоли что типо type-at-pos

Nikita
07.11.2016
14:04:53
http://bit.ly/2fv1EcZ
вот так выглядит. видимо не получить FSA описать на flow?(
а, с update понял. там надо SuccessAction поставить.
@vkurchatkin поправил ссылочку, есть идеи?

Vladimir
07.11.2016
14:09:40
чето длинно
можно покороче пример?

Nikita
07.11.2016
14:10:58
щааа

Vladimir
07.11.2016
14:13:45
Короче примерно проблема понятна

Google

Nikita
07.11.2016
14:14:15
https://flowtype.org/try/#0C4TwDgpgBAygrgYwRAziggg4BLA9gOwB4AVcCALihWACdt8BzAGigAUBDEAG13YBMAfFAC8UAN4AoKFFCRKpSEylQINGrhoB+SgDN2XFBCXSwnHv0oduvPhIC+AbgkTZ0AKJqNmHARJlK1HSMQqKS0q7yZMYqnjSUtHBGyqbWFlAe6jT2Ti5kbBD4fPQM3nhEChRUtMUh4soRUBXRqpnaUHoGSSZmNpQAbrjYfNEAthDA7JRh0lCQhcXxNInKdtnOrlClvhUB1YwsVuaCIrCIyGhb5VFsPfxCAD7psZd+kA-584wvFQI5GwBi2AgXD4hFYtWmfX0iUszVilE0GQ00TmRUYlAARrhcFwIOx8GsJDo4PgsGUoEdAcDQcRdkFmGwBAAKajsYCVKkgsECFjsMkESjfA4CACUlE5oPBdWk2B0UCZfJ8+AAdGMJlAAGQaqCKsqq8bsZWo4oi6UzGjjOA0fBmmZQKFcGFVNkQZUOxLRO0tDS7F3K700T0zY3omRLCDKaSOFbOaQW4BWm3TaTuyq6gj+2JQTTO9lu6HQSjplUpI5BgNF-kqgPZnVVo23PhQSj4OBcLhBkMMXT6QwrJyrIA
вот так короче)

Vladimir
07.11.2016
14:15:02
А почему ты думаешь, что action.payload типа P
?
Выглядит как void | Error | P

Nikita
07.11.2016
14:15:45
может я и не прав, а почему не P?
так там проверки есть
смотри, без PendingAction работает

Sergey
07.11.2016
14:17:49
а void применим к полям объектов?

Vladimir
07.11.2016
14:17:57
Ты исходишь из того, что если есть action.meta, то это pending?

Nikita
07.11.2016
14:18:08
https://flowtype.org/try/#0C4TwDgpgBAygrgYwRAziggg4BLA9gOwB4AVcCALihWACdt8BzAGigAUBDEAG13YBMAfFAC8UAN4AoKFFCRKpSEylQINGrhoB+SgDN2XFBCXSwnHv0oduvPhIC+AbgkTZ0AKJqNmHARJlK1HSMQqKS0q7yZMYqnjSUtHBGyqbWFlAe6jT2Ti5kbBD4fPQM3nhEChRUtMUh4soRUBXRqpnaUHoGSSZmNpQAbrjYfNEAthDA7JRh0lCQhcXxNInKdtnOrlClvhUB1YwsVuaCIrCIyGhb5VFsPfxCAD7psZd+kA-584wvFQI5GwBi2AgXD4hFYtWmfX0iUszVilE0GQ00TmRUYlAARrhcFwIOx8GsJDo4PgsGUoEdAcDQcRdkFmGwBAAKajsYCVKkgsECFjsMkESjfA4CACUlE5oPBdWk2B0UCZAEI+T58AA6MYTEXSmY0cZwGj4bUzKBQrgwqDKsqqloaKCaKpsiCq02JKCUS0EVUpI7RY02uIW-lq-12wMqr23PhuqD4OBcLi+maohbtfSGZTSRwrZTKWXyj1qjXsL0FNEMLXTaS64D6w2VmYuyqs9nO6FdY0xTK7R3W2KJkyllMJCAZqBZzMSACQymrtYd7Kc0nsEiAA
а еще вот так работает


Vladimir
07.11.2016
14:19:00
Проблема в том, что теоретически это неверно, т к и в других ветвях может быть meta
Ща проверю, но если flow это допускает, то это unsound

Nikita
07.11.2016
14:19:34
ну вот да, я думал об этом, то есть 2 вариант логически верней

Vladimir
07.11.2016
14:19:48
Sound проверка может быть только по полю, которое есть во всех ветвях

Nikita
07.11.2016
14:19:53
если мета пустая - значит хэндлим экшн, если не пустая - это спец-поведение

Vladimir
07.11.2016
14:20:24
Логически это будет верно для Exact типов

Google

Nikita
07.11.2016
14:21:16
гм, ну у меня экшны полностью flow покрыты и не может быть меты, которая не описана в типах. то есть с exactом колдовать?

Vladimir
07.11.2016
14:21:36
Не, пока не стоит, не думаю что это есть
Скорее всего unsound проверка работают
А, нет
Не работает
https://flowtype.org/try/#0FAFwngDgpgBAYgewTAvDA3sGMBmSBcMAziAE4CWAdgOYA0WMARkgLaEAUAlKgHwwBuCcgBNgAX2ChIsAEIBDUqgwNGCwpQCuLRlFLjJODZQDGIcgkowQUEuwAehRMgA+MeaW6Zs5HDHbhoBF87ADo8ZBRImAByEgoaaM8GAEhQ5gQWLgBuBgkYcSA

Nikita
07.11.2016
14:27:12
https://flowtype.org/try/#0FAFwngDgpgBAYgewTAvDA3sGMBmSBcMAziAE4CWAdgOYA0WMARkgLaEAUAlKgHwwBuCcgBNgAX2ChIsAEIBDUqgwM8CQswQAbKHMr1sjBYUoBXFoyilxknCcoBjEOQSUYIKCXYAPQomQAfGHlSbkxschwYdnBoBEivADpVVBQ0AHISCho00IYASESNFi4AbgYJGHEgA
не баг?

Vladimir
07.11.2016
14:28:11
Вот здесь должно работать
Не баг, но не круто
Типы не пересекаются

Nikita
07.11.2016
14:28:31
угу, есть с чем сравнивать. так экшны примерно распознаются

Vladimir
07.11.2016
14:29:11
Т е чисто теоретически 'FOO' и 'BAR' это точно также непересекающиеся типы

Nikita
07.11.2016
14:29:36
но флоу не может это гарантировать
а если указан foo и там и там - может

Vladimir
07.11.2016
14:29:58
Да, о том и речь

Nikita
07.11.2016
14:39:27
@vkurchatkin https://flowtype.org/try/#0MYGwhgzhAEAq0G8BQ1oEsIDED2wCuEApgCYAUAlAFzQBG22IhYAdoiqtAE6EAuenrHpzyF2AXyTsAZvQrUAbtjTE2HdFOikeACwwA6DDnxFi5RNAD0F6DwCeAB2zs1wbMwgNCekNgDmpAHI0VhljAPIAbmdoCVQJMSA
а подобное флоу никогда не будет ловить?

Vladimir
07.11.2016
14:40:44
Хз, я думаю это дискуссионный вопрос
Понятно, почему они так сделали, но я думаю что это плохо

Google

Nikita
07.11.2016
14:42:21
в eslint написал, вроде приняли и будут делать правило, но у flow это прям лучше бы получилось
тк есть четкая граница между методом и переменной

Vladimir
07.11.2016
14:42:38
И дело даже не в опечатке, а в том, что чтение необявленных полей это должно быть прямо вообще под запретом

Nikita
07.11.2016
14:43:43
ну тут js-сный неявный undefined всплывает

Vladimir
07.11.2016
14:46:15
нет, в том то и дело, что там может быть что угодно

Nikita
07.11.2016
15:35:26
а что вы с reject в промисах делаете? там же any, свои дефинишны?

Admin
ERROR: S client not available

Aleh
07.11.2016
15:38:23

Nikita
07.11.2016
15:38:45
ну, хочется строго типизировать

Aleh
07.11.2016
15:39:14
reject же должен мочь все, что можно в throw?

Nikita
07.11.2016
15:40:20
а resolve все, что можно в =, но это не отменяет же типизацию?)
я имею ввиду, что именно этот промис должен вернуть именно Error, например. В reject

Aleh
07.11.2016
15:41:08
ну, throw ж не типизируется

Nikita
07.11.2016
15:41:46
это не есть хорошо)

Aleh
07.11.2016
15:42:45
наверное

Nikita
07.11.2016
15:42:48
тем более, что интерфейс промисов позволяет типизировать

Vladimir
07.11.2016
15:45:30
Это невохможно сделать, потому так
И в TS и во Flow

Aleh
07.11.2016
15:48:35
а почему?

Vladimir
07.11.2016
15:49:24
Потому что then и т д ловят все ошибки

Google

Vladimir
07.11.2016
15:49:44
Следовательно тип в catch нельзя гарантировать

Nikita
07.11.2016
15:55:37
то есть надо для каждой ошибки проверять, что это реально ошибка?)

Vladimir
07.11.2016
15:56:14
Ну да
Увы, но это реальноть js

Nikita
07.11.2016
16:44:41
с кем-то мы тут спорили, зачем я Type: string в дженериках делал
вот еще пример:
declare function enableBatching<F: Function>(reduce: F): F;
reduce мне влом описывать, но и ломать тип я не хочу. могу сказать, что это функция, а какая - плевать.

Vladimir
07.11.2016
16:47:15
Ну на практике какая то функция - это бесполезный тип

Дмитрий
07.11.2016
16:50:00
Более того

Nikita
07.11.2016
16:50:28

Vladimir
07.11.2016
16:50:48
Кроме пожалуй случая заворачивания, но для этого нужен existential для аргументов

Nikita
07.11.2016
16:50:49
const store = createStore(enableBatching(rootReducer), middleware);
вот тут

Дмитрий
07.11.2016
16:50:56
Тогда тебе нужен просто дженерик

Nikita
07.11.2016
16:51:01