
Nikita
19.09.2016
16:34:06
чего бы ты в mapStateToProps не написал, flow пофиг

Aleh
19.09.2016
16:34:16
я ж скидывал пример
https://gist.github.com/mkusher/2493b57dffbfb6cd7b636f2d29158efc

Nikita
19.09.2016
16:35:05
и?)

Google


Nikita
19.09.2016
16:35:27
я про flow
там у flow типы еще круче прописаны) диффы всякие, но не работает, зараза
https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVpK0ctAXATwAcBTMAYTgDsqSBjPAQRhjAF4wAeAEQBowACvwDK-cgC4wAJRIBDBgBJKAWyLUSVPD35CwwgHwjd3YwEsAzkVl46AC0kAxAK5UGp6voAUqMGGWyiYTxrEgAVOAEAJzgic0lPc2C8EkkAeQAjACt6PH5EKiiYuLAFblMoKE5S8srqis5jAUM9Jv5ufQBKdn0W3h8-ALLLaztwwtj4gBMLKxt7MCHZuzyEAuiJkrL6utqtysbm4VaFzu6FoX7lEkiAcxJx4qonFjAAHzAANzhTSb7fGLw7io5gA-JIAN5EJyREhgsDpOBwGByKj8BCmPC2GRQOEIpEogC+qC6bB6njocFU6k0knIMFk5nMnHIp1JFHpjM4MnkeCUlLUtE02k2NSqewabWOR0O+n0AG50IRSBRqLQGMwYEEQsjGewuLojpK2jMRvNnK5AR5vL5-IEkmEIutigl7WksjkVmsipIdmLRQcjKyeobLoMTXMxk6puG7JJFqbPQ8feLfQGWkHzn8-Nc7kmwE8Xu8vj8swCgaCIVCYbjEcjZKiwOjMdia-j60SSWSKVTBXh4kQo4JO2B6wRh3SGUzuYoVAKNFpi78RdtxWnpfxF7KFaglWRKDQcgBZHMkSZ64UGsSSae82fUrR8QQiQ6NfiHszDOaOFxuK2hu0hJG3pgC6IRutkDCJoOvqpm+xztMOIY2mGn6jI6wGeNMqHzPGcxQcBMGrnBzQIWcJhZlctz3IOoHJHmhpgFhSy2Hm5FgPkeaEf6xFtBm76lkQlrAnCkLQrCkh4nWDZNliJA4hJtaEsSZzkvy960hyTIsuOmlcnIM5qb2wqwWA74yvKirEHuqpHiekxaskOrmOeBqvqZH7Md+FpAl4-4OQ6ea0SkYAZBBuTsasnFEe5GZIQMRC4WhgVMaacYxrY+EbCZZnDuRlwnoFiQhPRugpXMrG6Bx0HRTlZz8f0ZbUBWYCidWClttJGKyfJ8KKe2ylsqpPbzv2g4CMOo46ZOek8nyw1Cou-DZccm4WTuVkqgeDAAHJwP556PpeFDXvpt6GfOF7PkaCzpV5v5UL5vjIQByRARsBasEW3y-P0z2JbYb3OmVsY3dhmXFFx9RpqRbJ5U92ZUXmH1vJ831Zv8gnliJVbib1HVol1LbtVJRK+MOQ1zjS7LTdpZwTpyN5zZTD5LdFJjmduu6bWqeC7f5DlOS513-XdQmPU9tr+YDkjI19Ja-fF-3SyBwM4el4PJtx5wZnDEsFYOsuo-L8ONcJlZia2UkE82cmW0pZMqd2zOjcB41nJNdO6Yzd5GYty77JKzSrZzG37jz-0HToIhXtIp1M-el16C+xrYaLPnWvFUvoRsQXgR6EVellKbF1r4Kq2l2EEi+JGxRcf3pcrhuLfliMG88n1Gz9GNCc1rW45JKLW91dv9eTTvqdTnK02y9NTnHPsXY+kMBy15eg8xVeBs+a1c2HOT-f5gscBKvTr6lYDmvd4uS-ayu5yF7qQQXUWiiZZe3Wfcyb+miF14rDfZ0eO3FGzcbT62Ak3NGDVMZNWxhbYmg9GyE1tgg0ejtzpU08AOV2E0qBjk9tNb2GCFxo39n6KG-B36p0-nYb+65O5bkssqPeDBuByVkM8PAkcnx6BjkQ+aLMeEGBTp5C+P4xaeE7P0CmE9Z7MgzHI-hzNjLRSoaI-6dDGHrWYTZVh7DOGHxILqDgkjuj9AaF4cevYXYbDdmyD2M8vbz2IZwP2b816XyEt-YO6BJj0HpDCPwcBJjPDIAAchhDyAAtDCEJAAPMJLV+h+LoAEsgHxZCRDACQOJahIh4GKOCBWFItp9m5jkDUCtfAADJynqhYIYxkVSwC1JYXgY8VFJjNNabo9pdlGnmG6XU3me17RDLaXze0AsjGDPhjU4Z-1xm9IPvaJySzSlsKgBwmAeB1nh30TsgZCp4aFA+D8a4J0eRyPBIkOAMI85PzsKYGAkwYRUDhKOKuxywBElJnM1ApgqT5JaiUnmBIwBQGiMoMAETToxNPE4BJIdlQAFVzDXD1EU3wPwZZOGUOka4WYnDosiFQWQVxJCJEiKYKgNxUBEm0WQNF1x9ocCxWAYlFywDMsiPSphZBGBEBemQNl-ROWREkDy-yfLGVgEFUQB4mKxUkslSSmVUBxFAjlUKrBg55UPC6OymEeBoRUC4MMB6kInQADpxW2pJWSq4BJODAAtRZBlJTEjDNPPKvUoKciSM8PKjo3z4aoE9VwgIRBzxtJ9UKsAwALJAA
WTF?


Dreamerinnoise
19.09.2016
16:50:20
Не вижу ошибки.


Nikita
19.09.2016
16:50:59
мне кажется я понял в чем моя ошибка)
https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVpK0ctAXATwAcBTMAYTgDsqSBjPAQRhjAF4wAeAEQBowACvwDK-cgC4wAJRIBDBgBJKAWyLUSVPD35CwwgHwjd3YwEsAzkVl46AC0kAxAK5UGp6voAUqMGGWyiYTxrEgAVOAEAJzgic0lPc2C8EkkAeQAjACt6PH5EKiiYuLAFblMoKE5S8srqis5jAUM9Jv5ufQBKdn0W3h8-ALLLaztwwtj4gBMLKxt7MCHZuzyEAuiJkrL6utqtysbm4VaFzu6FoX7lEkiAcxJx4qonFjAAHzAANzhTSb7fGLw7io5gA-JIAN5EJyREhgsDpOBwGByKj8BCmPC2GRQOEIpEogC+qC6bB6njocFU6k0knIMFk5nMnHIp1JFHpjM4MnkeCUlLUtE02k2NSqewabWOR0O+n0AG50IRSBRqLQGMwYEEQsjGewuLojpK2jMRvNnK5AR5vL5-IEkmEIutigl7WksjkVmsipIdmLRQcjKyeobLoMTXMxk6puG7JJFqbPQ8feLfQGWkHzn8-Nc7kmwE8Xu8vj8swCgaCIVCYbjEcjZKiwOjMdia-j60SSWSKVTBXh4kQo4JO2B6wRh3SGUzuYoVAKNFpi78RdtxWnpfxF7KFaglWRKDQcgBZHMkSZ64UGsSSae82fUrR8QQiQ6NfiHszDOaOFxuK2hu0hJG3pgC6IRutkDCJoOvqpm+xztMOIY2mGn6jI6wGeNMqHzPGcxQcBMGrnBzQIWcJhZlctz3IOoHJHmhpgFhSy2Hm5FgPkeaEf6xFtBm76lkQlrAnCkLQrCkh4nWDZNliJA4hJtaEsSZzkvy960hyTIsuOmlcnIM5qb2wqwWA74yvKirEHuqpHiekxaskOrmOeBqvqZH7Md+FpAl4-4OQ6ea0SkYAZBBuTsasnFEe5GZIQMRC4WhgVMaacYxrY+EbCZZnDuRlwnoFiQhPRugpXMrG6Bx0HRTlZz8f0ZbUBWYCidWClttJGKyfJ8KKe2ylsqpPbzv2g4CMOo46ZOek8nyw1Cou-DZccm4WTuVkqgeDAAHJwP556PpeFDXvpt6GfOF7PkaCzpV5v5UL5vjIQByRARsBasEW3y-P0z2JbYb3OmVsY3dhmXFFx9RpqRbJ5U92ZUXmH1vJ831Zv8gnliJVbib1HVol1LbtVJRK+MOQ1zjS7LTdpZwTpyN5zZTD5LdFJjmduu6bWqeC7f5DlOS513-XdQmPU9tr+YDkjI19Ja-fF-3SyBwM4el4PJtx5wZnDEsFYOsuo-L8ONcJlZia2UkE82cmW0pZMqd2zOjcB41nJNdO6Yzd5GYty77JKzSrZzG37jz-0HToIhXtIp1M-el16C+xrYaLPnWvFUvoRsQXgR6EVellKbF1r4Kq2l2EEi+JGxRcf3pcrhuLfliMG88n1Gz9GNCc1rW45JKLW91dv9eTTvqdTnK02y9NTnHPsXY+kMBy15eg8xVeBs+a1c2HOT-f5gscBKvTr6lYDmvd4uS-ayu5yF7qQQXUWiiZZe3Wfcyb+miF14rDfZ0eO3FGzcbT62Ak3NGDVMZNWxhbYmg9GyE1tgg0ejtzpU08AOV2E0qBjk9tNb2GCFxo39n6KG-B36p0-nYb+65O5bkssqPeDBuByVkM8PAkcnx6BjkQ+aLMeEGBTp5C+P4xaeE7P0CmE9Z7MgzHI-hzNjLRSoaI-6dDGHrWYTZVh7DOGHxILqDgkjuj9AaF4cevYXYbDdmyD2M8vbz2IZwP2b816XyEt-YO6BJj0HpDCPwcBJjPDIAAchhDyAAtDCEJAAPMJLV+h+LoAEsgHxZCRDACQOJahIh4GKOCBWFItp9m5jkDUCtfAADJynqhYIYxkVSwC1JYXgY8VFJjNNabo9pdlGnmG6XU3me17RDLaXze0AsjGDPhjU4Z-1xm9IPvaJySzSlsKgBwmAeB1nh30TsgZCp4aFA+D8a4J0eRyPBIkOAMI85PzsKYGAkwYRUDhKOKuxywBElJnM1ApgqT5NjjyShKoBE-LAFAaIygwARNOmEhUgK8lcPBCUnmBIoUwrhZEhgMTTxOASSHZUABVcw1w9RFN8D8GWThlDpGuFmJw5LIhUFkFcSQiRIimCoDcVARJtFkDJdcfaHAqVgGZRcsAwrIj8qYWQRgRAXpkDFf0SVkRJAyv8nKwVYBFVEAeJStVLLNUsp1akyceqlXZLickKgkxnI3gAHQLwWqQ-VDwNzfR6OKsAby-GRFMb63wMI8DQioFwYYD1wSYgsE67BsQnXqqTSytlVwCScGAFGiyT1fnNNQFAcRQJM630AfffV-kui+tDeGpJcz1W0pYL9AkCoBUlMSMM08+q9TopyJ4G+gFAEdE8Pqjo3z4aoHbVwgIRBzxtK7da4AFkgA
неа, не работает
https://github.com/flowtype/flow-typed/pull/96#issuecomment-219204578
$Diff doesn't quite work to subtract Objects. It basically doesn't throw any errors.
гуано, в общем
а в flow можно как-то взять тип возвращаемого значения функции?

Google

Aleh
19.09.2016
17:24:26
а в TS работает?
это типизированный стейт, но ему все равно какой компонент подключается

Nikita
19.09.2016
17:25:04
не, мне важно, чтобы где-то была ошибка
плевать, место вызова компонента это, или connect
по логике должно быть место вызова компонента, но этого нет

Aleh
19.09.2016
17:26:12

Nikita
19.09.2016
17:26:36
так а как ты проверяешь, что компонент получил нужные данные?

Aleh
19.09.2016
17:26:53
я этого не проверяю, у нас там ошибок как-то нет

Nikita
19.09.2016
17:27:01
збс)

Aleh
19.09.2016
17:27:02
connect и компонент лежат рядом
легко проверить, что все ок
вообще в теории это можно сделать, сейчас подумаю

Nikita
19.09.2016
17:27:28
а если редьюсер и экшн-криейторы рядом лежат - их тоже легко проверить?
двойные стандарты)
это так и надо называть - мы это не можем проверить

Aleh
19.09.2016
17:27:47

Nikita
19.09.2016
17:28:21
есть экшн, редьюсер должен его обработать. нафиг типы писать, когда они рядом лежат?)
вообще, у нас все внутри проекта рядом лежит)))

Aleh
19.09.2016
17:28:50
рядом = в одном файле :)

Nikita
19.09.2016
17:29:38
а какая разница? ты же его в другом файле вызываешь

Google

Aleh
19.09.2016
17:30:18
ну, просто типичный файл
type Props = {
...
}
...
connect(state => ({smth: state.some.path.to.smth}))(App)
короче, у нас не было с этим проблем

Nikita
19.09.2016
17:30:57
что значит не было проблем?))
у меня и без типов не было проблем, меня убедили, что мне нужны типы, но, как оказалось, я не нужен типам))

Aleh
19.09.2016
17:31:41
стой, ты не знаешь, зачем ты типизируешь?

Nikita
19.09.2016
17:31:47
не, я знаю
и именно поэтому хочу чтобы в этом месте у меня тоже было типизировано
вот у тебя есть компонент, ну хз, который список юзеров выводит
у него есть users: User[]
ты где-то его вызываешь и не передаешь юзеров, ты ожидаешь ошибку?

Aleh
19.09.2016
17:37:41
я понимаю о чем ты, да, было бы круто еще и это типизировать
но у нас это нетипизировано и проблем именно с этим не было, потому что когда рефакторится компонент, коннект прямо там же

Nikita
19.09.2016
17:38:29
ну это такая себя отмазка)
если ты редьюсер захочешь отрефакторить, как ты найдешь все, что его использует?)
особенно, если у тебя есть код вида:
({foo, bar}: AppState) => ({foo, bar})
или экшн поменял интерфейс, а где-то, куда прокидывал - забыл
вот у меня такое прям сейчас было, флоу насрать. думаю тс тоже(

Aleh
19.09.2016
17:42:41
т.е. если я пишу state => state.some.unknown.path, то получаю ошибку

Nikita
19.09.2016
17:45:38
эм)

Google

Ҫѐҏӗѫӑ
19.09.2016
17:45:53
Дениел говорил они там придумали как помочь миддлвары типизировать кстати

Nikita
19.09.2016
17:46:51
экшн криейтор принимает ?string, стал string. в компоненте ты сделаешь foo(null) и flow тебе ничего не скажет

Aleh
19.09.2016
17:47:09

Nikita
19.09.2016
17:47:24
потому что connect не типизирован

Aleh
19.09.2016
17:49:01
а ты Props у компонента не описываешь? О.о

Nikita
19.09.2016
17:49:53
так я тебе про то и говорю))
вот у тебя в Props останется ?string
и flow не покажет несовместимости

Admin
ERROR: S client not available

Aleh
19.09.2016
17:51:05
стоп
typeof же
type Props = {
someActionCreator: typeof someActionCreator
}
немного многословно
* это у меня экран грязный(

Nikita
19.09.2016
17:54:38
гм, можно и так
но это такое себе


Aleh
19.09.2016
17:57:25
но это такое себе
https://www.typescriptlang.org/play/index.html#src=%0D%0Atype%20MapStateToProps%3CT%3E%20%3D%20%7B%0D%0A%20%20%20%20(state%3A%20any)%3A%20T%0D%0A%7D%0D%0A%0D%0Atype%20Component%3CP%3E%20%3D%20%7B%0D%0A%20%20%20%20props%3A%20P%3B%0D%0A%7D%0D%0A%0D%0Afunction%20connect%3CT%2C%20P%20extends%20T%3E(mapStateToProps%3A%20MapStateToProps%3CT%3E%2C%20component%3A%20Component%3CP%3E)%3A%20Component%3CP%3E%20%7B%0D%0A%20%20%20%20const%20props%20%3D%20mapStateToProps(%7B%7D)%3B%0D%0A%20%20%20%20return%20component%3B%0D%0A%7D%0D%0A%0D%0Atype%20Props%20%3D%20%7B%0D%0A%20%20%20%20a%3A%20number%3B%0D%0A%20%20%20%20b%3A%20string%3B%0D%0A%7D%0D%0A%0D%0Aconst%20component%3A%20Component%3CProps%3E%20%3D%20%7B%0D%0A%20%20%20%20props%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20a%3A%2010%2C%0D%0A%20%20%20%20%20%20%20%20b%3A%20%22%22%0D%0A%20%20%20%20%7D%0D%0A%7D%3B%0D%0A%0D%0Aconst%20mapStateToProps%20%3D%20function(state%3A%20any)%20%7B%0D%0A%20%20%20%20return%20%7B%0D%0A%20%20%20%20%20%20%20%20a%3A%20%22asdi%22%2C%0D%0A%20%20%20%20%20%20%20%20c%3A%20%22%22%0D%0A%20%20%20%20%7D%3B%0D%0A%7D%0D%0A%0D%0Aconnect(mapStateToProps%2C%20component)%3B%0D%0A
type diff нет, поэтому Component<P> :(
но короче чето аналогичное можно во flow впилить

Google

Aleh
19.09.2016
18:19:29
@gusnkt https://gist.github.com/8c41bf4c4f634fb56c3bd47dad9c0bc3 пока только для mapStateToProps, покручу еще для остального
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/react-redux/react-redux.d.ts#L18 кстати тоже интересное решение

Mike
19.09.2016
20:41:38
по поводу safeBind правильного решения сделать не удалось, но то что меня устраивает вот http://tinyurl.com/hnxzoh8
до 5 аргументов норм, дальше также как обычный бинд

Aleh
20.09.2016
10:19:37

Mike
20.09.2016
10:20:28
да, не супер, но конкретную задачу решет. Закапываем во вреймврк и всё ок. На самом деле план был сделать без копипасты, но пока не удалсь

Nikita
20.09.2016
10:31:48
как flow объяснить:
handleChange(event: SyntheticEvent) {
this.props.onAttachments(
Array.from(event.target.files)
);
}
27: Array.from(event.target.files)
^^^^^ property `files`. Property not found in
27: Array.from(event.target.files)
^^^^^^^^^^^^ EventTarget
Found 1 error

Aleh
20.09.2016
10:32:31
а точно SyntheticEvent?

Nikita
20.09.2016
10:32:53
так а он и не знает))

Aleh
20.09.2016
10:33:09
кто не знает? Оо

Nikita
20.09.2016
10:33:17
думаешь он может связать onChange в инпуте и метод в компоненте?)

Aleh
20.09.2016
10:33:38
почему ты написал SyntheticEvent?
и вообще да, может, если onChange property типизирован

Nikita
20.09.2016
10:34:29
render() {
const id = 'attachment_button_input';
return (
<button className={styles.button}>
<label htmlFor={id} title="attachment">
<Icon glyph="attach_file" className={styles.icon}/>
<input
id={id}
type="file"
className={styles.input}
onChange={this.handleChange}
multiple
/>
</label>
</button>
);
}
https://github.com/facebook/flow/pull/2100/files
ну вот, собственно)

Aleh
20.09.2016
10:36:46
type MyEvent = SyntheticEvent & { target: HTMLInputElement };
пока не влили, типизируй сам

Nikita
20.09.2016
10:37:09
угу, прийдется

Vadim
20.09.2016
13:39:25
Как указать необязательный дженерик? Ну то-есть, что б его можно было передавать или нет.