
Aleh
02.09.2016
17:06:12
или не так записать
но скорее я ошибусь на единицу где-то ))

Oleg
02.09.2016
17:07:26

Aleh
02.09.2016
17:07:57
ну так-то можно редьюсеры на хаскеле писать и транспайлить в js ))

Google

Nikita
02.09.2016
17:08:20
а также прекрасный мир отсутствия дефинишнов под все библиотеки, которые тебе нужны))

Oleg
02.09.2016
17:08:29
Это из готовых к фронтенду решений

Nikita
02.09.2016
17:10:32
вот поэтому я и написал, что типы и js вещи не всегда совместимые)

Ivan
02.09.2016
17:12:16
Вот типы для сортировки, для которой не нужны тесты https://github.com/davidfstr/idris-insertion-sort

Aleh
02.09.2016
17:12:26
ты всегда можешь сделать declare module "some-lib" и типизировать только свой обертку, которую юзаешь

Nikita
02.09.2016
17:12:32
и вот еще про типы
create(name: string, shortname: string)
вот сигнатура
типы никак не уберегут от того, что ты перепутаешь name и shortname местами. И как раз это - большая часть ошибок

Aleh
02.09.2016
17:15:19
так юзай объекты

Vladimir
02.09.2016
17:15:25
+1

Aleh
02.09.2016
17:15:39
create({ shortname, name})

Google

Vladimir
02.09.2016
17:15:42
https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgCCAxhgJZwB2A4gDwAqANGAAoB8YAvGAN6phhs+AFxgm-MDgCGWeFIAmolqgC+AbnRCCAJTzyArsTwAnWgGVmhDtwAUAZwxSMeURbBTSFSqMIBKLhxmGpi4BGaOzly86pqhRJ5UXBIAPvHkVHQA5AAiAKIAMrn0uQD6AGIA8hWZzDxgZIpgDsZklADmYCpsKWleWQDC2rmExeVVNbz1jc2tbcyUUgC2Lk0YLe2d3QKoUPqUCZRgxnqGJvYRK+FOeMwe6d69VP58AnYIZBjEABY2d14AdFpnhIBMQpHYCDkCkVSpVqqIXgIkccMPpjIceDEkZ0QWAwRCwJlBsNRnDMgjcQIUWiMVikSpcfI8FApPoYBhRL8DqJKGyYL4NAIGQz0EA
Набросал что-то

Aleh
02.09.2016
17:17:54

Ivan
02.09.2016
17:17:55
Можно для них типы завести - Name и ShortName и в зависимой системе типов сказать, что для любого name:Name и shortName:ShortName выполняется name.length>shortName.length. тогда не перепутаешь

Vladimir
02.09.2016
17:18:10

Aleh
02.09.2016
17:19:57
а зачем type Reducer?

Vladimir
02.09.2016
17:20:53
так, для наглядности, для композиции редьюсеров пригодится, etc

Nikita
02.09.2016
17:21:08
угу, он дальше пригодится
в редьюсерах так можно. Но экшн криейторы же!
в принципе можно типизировать только самые простые, которые возвращают объект

Vladimir
02.09.2016
17:22:08
они не нужны)
ну то есть, просто функция созает объект
чего сложного

Aleh
02.09.2016
17:23:27
я через сниппет обычно создаю сразу action creator + action type

Nikita
02.09.2016
17:29:28
ну, я говорил в такой схеме смущают строки)
я понимаю, что флоу будет орать, если вдруг где-то поменяю
но ок, мб попробую пару редьюсеров так запилить

Oleg
02.09.2016
17:37:06
Предложите абстракции для типизированных экшенов и типизированного листенера для шины
Что-то типа bus.emit(new DeleteAction<IDoc>("123"))
как листенер bus.on() на ваш взгляд должен выглядеть?

Google

Oleg
02.09.2016
17:41:44
И как ловить такой экшен?


Дмитрий
02.09.2016
17:52:35
у тебя есть обощенный сервис, работающий с моделью документа определенного рода. Service<ISomeDoc>. Тебе нужно собрать сервис Creatable, Deletable и т/д/
https://www.typescriptlang.org/play/index.html#src=interface%20IUpdateable%20%7B%20update()%3Avoid%20%7D%0D%0Ainterface%20IDeletable%20%7B%20delete()%3Avoid%20%7D%0D%0Alet%20updater%20%3D%20%3CIUpdateable%3E%20%7B%0D%0A%09update()%3Avoid%20%7B%0D%0A%20%20%20%20%20%20console.log('update')%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0Alet%20remover%20%3D%20%3CIDeletable%3E%20%7B%0D%0A%09delete()%3Avoid%20%7B%0D%0A%20%20%20%20%20%20console.log('update')%0D%0A%20%20%20%20%7D%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20extendClass%3CT%2C%20U%3E(first%3A%20T%2C%20second%3A%20U)%3A%20T%20%26%20U%20%7B%0D%0A%20%20let%20result%20%3D%20%3CT%20%26%20U%3E%20%7B%7D%0D%0A%20%20for%20(let%20id%20in%20first)%0D%0A%20%20%20%20result%5Bid%5D%20%3D%20first%5Bid%5D%0D%0A%0D%0A%20%20for%20(let%20id%20in%20second)%0D%0A%20%20%20%20if%20(!result.hasOwnProperty(id))%0D%0A%20%20%20%20%20%20result%5Bid%5D%20%3D%20second%5Bid%5D%0D%0A%20%20return%20result%3B%0D%0A%7D%0D%0Afunction%20extend3%3CT%2C%20U%2C%20V%3E(first%3A%20T%2C%20second%3A%20U%2C%20last%3A%20V)%20%7B%0D%0A%09return%20extendClass(extendClass(first%2Csecond)%2Clast)%0D%0A%7D%0D%0Afunction%20fabric%3CT%2CU%3E(model%3A%20%7Bnew(...arguments%3AU%5B%5D)%3A%20T%20%7D%2C...args%3AU%5B%5D)%20%7B%0D%0A%20%20%20%20return%20new%20model(...args)%3B%0D%0A%7D%0D%0A%0D%0Afunction%20Editable%20%3CT%2C%20P%2C%20U%2C%20D%3E(classType%3A%7Bnew(...args%3AP%5B%5D)%3AT%7D%2Cupd%3AU%2Cdel%3AD%2C...args%3AP%5B%5D)%20%7B%20%20%0D%0A%20%20%20%20return%20extend3(fabric(classType%2C...args)%2C%20upd%2C%20del)%0D%0A%7D%0D%0A%0D%0Aclass%20A%20%7B%0D%0A%09ping()%3Avoid%20%7B%0D%0A%09%09console.log('A%3A%3Aping')%3B%0D%0A%09%7D%0D%0A%7D%0D%0A%0D%0Alet%20a%20%3D%20Editable(A%2Cupdater%2Cremover)%0D%0A%0D%0Aa.ping()%3B%20%20%2F%2F%20A%3A%3Aping%0D%0Aa.update()%20%2F%2F%20update%0D%0Aa.delete()%20%2F%2F%20delete


Ҫѐҏӗѫӑ
02.09.2016
18:02:46

Vladimir
02.09.2016
18:03:09
груви? там вообще статических типов нет
Oleg https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgDKeMeAxhnAE4A8AKgDRgCyAfGALxhgAUAbgC4wdAJSd2AfmYBudAEsAdhjxUoAQzIEAQgFcAzvXYBvVNzwBbORn5DRQvnDkATWdz06ARnrJU5HvDRsPHok5JRUQsSkFNT0TGxMUApCPOZCzGIc7A7OIvaOLqgAvkA

Ҫѐҏӗѫӑ
02.09.2016
18:04:49

Vladimir
02.09.2016
18:05:02
в свифте, в расте примерно так же
но в ML и flow наиболее приятно

Ҫѐҏӗѫӑ
02.09.2016
18:08:06
во flow? паттерн матчинг?

Mike
02.09.2016
18:22:59
Без рантайма или манглинга толком паттерн матчинг не сделать
Полюбас rtti сильный нужен
А ни flow ни тайпа этого не дают

Ҫѐҏӗѫӑ
02.09.2016
18:24:17
в языке не будет
своими силами — дорого

Mike
02.09.2016
18:24:48
Дорого в плане раньайм затрат перфоманса или реализации?

Ҫѐҏӗѫӑ
02.09.2016
18:24:56
перформанса

Sergey
02.09.2016
18:25:01
Aaaaaa

Ҫѐҏӗѫӑ
02.09.2016
18:25:15
ага, сегодня в лс подгон сделали)

Mike
02.09.2016
18:25:20
Так только на входе внешних апи делать надо

Ҫѐҏӗѫӑ
02.09.2016
18:25:50
был такой исследовательский проект safe typescript

Google

Ҫѐҏӗѫӑ
02.09.2016
18:26:04
https://www.microsoft.com/en-us/research/video/safe-typescript-safe-and-efficient-gradual-typing-for-typescript/

Vladimir
02.09.2016
18:26:10

Mike
02.09.2016
18:27:46
Я думал сделать rtti по d.ts
И все еще думаю попробовать

Ҫѐҏӗѫӑ
02.09.2016
18:31:00
без паттерн матчинга это не настоящие adt

Oleg
02.09.2016
18:38:19


Дмитрий
02.09.2016
18:40:42
Я бы вообще там функции эти по одной закидывал, с тем же интерфейсом)
Но суть думаю примерно такая)

Dreamerinnoise
02.09.2016
18:41:45
MobX нужен или не нужен?

Sergey
02.09.2016
18:42:16
Идеально!

Oleg
02.09.2016
18:42:47

Sergey
02.09.2016
18:44:21

Vladimir
02.09.2016
18:44:51
Ну на ts 2.0 я думаю аналогично

Oleg
02.09.2016
18:45:39
Продолжаю собирать предложения по реализации шины типизированных экшенов. bus.emit(new DeleteAction<IDoc>("123")) как должен выглядеть и работать bus.on()?
кто какой DI предпочитает в ts?

Alex
02.09.2016
19:51:48
Disability insurance?

Google

Oleg
02.09.2016
19:53:23
IoC

Alex
02.09.2016
19:53:56
:{{

Oleg
02.09.2016
19:56:46
dependency injection

Alex
02.09.2016
19:56:57
я понимаю)
причем тут DI
и TS

Aleh
02.09.2016
19:57:47
в ts есть типы, было бы прикольно на их основе компилировать ioc
но у нас пока руками простейший контейнер

Oleg
02.09.2016
20:06:37
на вскидку насколько switch быстрее проверки на существование свойства?

Mike
02.09.2016
20:09:51
От количества зависит
Свитч линеен
Свойство - хеш
До десятка точно свитч должен выиграть
Дальше хз

Dreamerinnoise
02.09.2016
20:12:03
там что-то было про 128й кейс
дальше деопт
это всё что я знаю :D

Ҫѐҏӗѫӑ
03.09.2016
07:53:52
@vkurchatkin а ты не пробовал BuckleScript?
там 1.0 вышел
Oleg вот этот хвалили https://github.com/inversify/InversifyJS