
Artur
15.06.2018
12:32:06

Олександр
15.06.2018
12:33:06

Дмитрий
15.06.2018
12:33:32

Artur
15.06.2018
12:34:23
Ну, если классы будут отличаться по структуре, то данное поведение будет доставлять чуть меньше проблем

Google

kana
15.06.2018
12:34:45
хаскель - добавим ньютайпы, чтобы различать значения одного типа
тс - давайте считать два значения одной структуры одного типа

Artur
15.06.2018
12:35:40

Олександр
15.06.2018
12:35:43
Да, будет. Но проблемы у тебя не в этом )
https://github.com/Vincit/objection.js/blob/master/examples/express-ts/src/models/Animal.ts
Ну вот так автор решает это, мне нравится) *знаю что уже все, структуры разные, это уже не к топику*

Artur
15.06.2018
12:36:19
Не более одно раза на приложение, потом начнут совпадать
type North = {
readonly type: unique symbol;
}
type South = {
readonly type: unique symbol;
}
type East = {
readonly type: unique symbol;
}
type West = {
readonly type: unique symbol;
}
type Direction = North | South | East | West

Олександр
15.06.2018
12:36:21
вполне симпатишно

Artur
15.06.2018
12:36:26
вот так выкрутиться можно

kana
15.06.2018
12:37:25
а термы какие?

Artur
15.06.2018
12:37:40

kana
15.06.2018
12:37:47
ну значения
подходящие под этот тип

Дмитрий
15.06.2018
12:38:16

Artur
15.06.2018
12:38:40
До unique symbol

Google

Дмитрий
15.06.2018
12:39:25
То есть это даже не выкрутиться, это типа и есть изначальное решение, которое упрощается подходом на основе номинальности

Artur
15.06.2018
12:39:35

Олександр
15.06.2018
12:39:46
А если выкинуть из TS все то, что есть во Flow, что останется? Их вообще можно сравнивать?

Artur
15.06.2018
12:40:14
conditional types как миниму

Дмитрий
15.06.2018
12:40:22
Это сахар

Artur
15.06.2018
12:41:12

Дмитрий
15.06.2018
12:41:47
в флоу не нужен infer для return type)
В флоу есть $Call для того чтобы получать это непосредственно
Насчёт conditional types вот у меня конкретный кейс

Олександр
15.06.2018
12:44:27
эти $Call вообще заставляют меня задуматся об чистом js ;)

Дмитрий
15.06.2018
12:46:12
https://github.com/zerobias/effector/blob/master/packages/effector/index.js.flow#L112 этот тип разворачивает контейнер Store и оставляет его дженерик, но если это не Store то тип возвращается как есть

kana
15.06.2018
12:47:53
(госпади как же тяжело читать код без отступов, просто нифига не понимаю, где там куда вложенно)

Alexander
15.06.2018
12:49:03

Дмитрий
15.06.2018
12:49:55
const foo = createStore(0)
const bar = createStore('bar')
const baz = merge({foo, bar, kek: 0})
Тип baz будет Store<{
foo: number,
bar: string,
kek: number,
}>
Тип foo соответственно Store<number>, который был развернут по условию)
Воот. Собственно от condition types хотелось бы тоже ожидать чего то хотя бы подобного
Раз уж замутили для этого аж отдельный синтаксис

Artur
15.06.2018
12:53:40
потому что cryptic

Google

Дмитрий
15.06.2018
12:54:03
Ппц))

Олександр
15.06.2018
13:12:13
https://youtu.be/etKOc80-cw0?t=42m5s
интересная реализация
TS тупит жестко, а flow подсказывает там, где бы я даже не ожидал его увидеть
https://reasonml.github.io/docs/en/if-else.html
а это еще интересней

Дмитрий
15.06.2018
13:17:01
Да, я к этому на самом деле и клонил
Номинальная типизация — мост между жс и sum type из ризона

Vladimir
15.06.2018
13:18:40
Как они связаны?

Дмитрий
15.06.2018
13:18:47
class A {}
class B {}
type AB = A | B
Всё тебе отдельно надо пояснять))

Vladimir
15.06.2018
13:19:29
Только это делается обычно через тэги, а не классы

Дмитрий
15.06.2018
13:19:39
Обычно да

Максим
15.06.2018
13:20:11
есть какие-то вменяемые реализации стэйт машины на ts?? чтоб с колбэками и сохранением-восстановлением состояния?

Дмитрий
15.06.2018
13:20:24
Обычно да
Следующий шаг — заметить что это равносильно но быстрее описывается через классы

Vladimir
15.06.2018
13:20:58
Не знаю, чем это быстрее

Дмитрий
15.06.2018
13:21:05
Чем тегами

Vladimir
15.06.2018
13:21:15
Это не быстрее, это так же

Дмитрий
15.06.2018
13:21:42

Vladimir
15.06.2018
13:21:56
Давай пример

Google

Дмитрий
15.06.2018
13:22:31
class A {}
class B {}
type AB = A | B
Всё тебе отдельно надо пояснять))

Vladimir
15.06.2018
13:22:55
type AB =
| { t: 'A' }
| { t: 'B'}

Дмитрий
15.06.2018
13:23:31
У меня если что готовые конструкторы
Здесь я вижу только декларацию

Vladimir
15.06.2018
13:24:46
Нет у тебя как раз конструкторов
Их еще отдельно написать придется

Дмитрий
15.06.2018
13:25:16
new A даёт новое значение типа A

Vladimir
15.06.2018
13:25:38
Ок, new A() против { t: 'A' }

Дмитрий
15.06.2018
13:26:24
против const a = () => ({ t: 'A' })

Vladimir
15.06.2018
13:26:49
Зачем?

Дмитрий
15.06.2018
13:27:09
Сорян, одного тайп левела маловато

Vladimir
15.06.2018
13:27:25
Если тебе нужна такая функция, то в таком случае и с классми нужно будет () => new A

Дмитрий
15.06.2018
13:27:41
Нет, зачем? Конструктор уже есть

Vladimir
15.06.2018
13:28:31
Потому что писать new A ничем не лучше, чем писать { t: 'A' }

Дмитрий
15.06.2018
13:30:02
Это называется буквоедство вот сейчас тут упираться и утверждать что не видишь никакой разницы
Я понял твою позицию, меня подобная уравниловка не устраивает

Vladimir
15.06.2018
13:30:39
1. На практике я не вижу разницы
2. Причем здесь ризон? Там как раз нет конструкторов

Дмитрий
15.06.2018
13:30:48
Начинаешь понимать

Олександр
15.06.2018
14:16:25
Ребят, а в какой среде разработки пишете на flow?
В вебсторме у меня какая-то дичь происходит:

Google

Олександр
15.06.2018
14:16:26
подхватывает мою писанину очееень долго, по три секунды boolean ищет
тоже самое и с ошибками, мега слоупочно
это я что-то криво настроил, или это просто криво реализован syntax highlight и прочее в webstorm'е?

George
15.06.2018
14:20:07
export function fun<T extends {new(...args:any[]):{}}>(target: T) {
return class extends target {
newMethod(): SomeType {
return SomeTypeConstructor<T>(this);
};
};
} - кто знает, почему this is not assignable to T?

Vladislav
15.06.2018
14:28:51
инфраструктура у него говно)

John
15.06.2018
14:30:39
просто шторм шибко умный, мейби лучше попробовать vscode?
по крайней мере в последних версиях с тайпскриптом там оке доке)

Vladislav
15.06.2018
14:31:28
с тайпскриптом но не с флоу)

John
15.06.2018
14:31:39
ну да)

Олександр
15.06.2018
14:35:27

Дмитрий
15.06.2018
14:35:38

Олександр
15.06.2018
14:35:46
в ВСке писал c++ буквально 5 минут, а наебался на часы

Roman
15.06.2018
14:35:46

Vladislav
15.06.2018
14:36:59

John
15.06.2018
14:43:25

Алексей
15.06.2018
14:43:48
vs != vscode

John
15.06.2018
14:44:27
да, просто там они экплуатируют бренды майкрософта, вижуал студия, интеллисенс

Алексей
15.06.2018
14:44:37
они вообще зря назвали его vscode, сразу негативные ассоциации с vs

John
15.06.2018
14:44:38
и всякое уг, хотя ничего общего с этим всем вот нету
дада