
Nikita
30.08.2016
17:20:41
flow показывает, что сам тип записан не верно, а не его данные

Vladimir
30.08.2016
17:21:24
ну у flow есть проблема с отображением ошибок
т к он строит сложную модель, из которая потом сложно сказать, где причина, а где следствие
данные не сответствую типу => нельзя утвержать, ошибка в типе или в данных. просто несоответствие

Google

Дмитрий
30.08.2016
17:22:38

Vladimir
30.08.2016
17:23:07
С этим то что нет так? https://www.typescriptlang.org/play/index.html#src=interface%20A%20%7B%0D%0A%7D%0D%0A%0D%0Ainterface%20B%20%7B%0D%0A%20%20%20%20boom()%3A%20void%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20test(fn%3A%20(a%3A%20A)%20%3D%3E%20void)%20%7B%0D%0A%20fn(%7B%7D)%0D%0A%7D%0D%0A%0D%0Avar%20a%3A%20A%20%3D%20%7B%7D%0D%0A%0D%0A%0D%0Avar%20fn%20%3D%20(b%3A%20B)%20%3D%3E%20b.boom()%3B%0D%0A%0D%0Atest(fn)

Nikita
30.08.2016
17:23:22
https://flowtype.org/try/#0PQKgBAAgZgNg9gdzCYAoVBjOA7AzgFzAEEAHEsAXjAAoBKSgPjAEYAmAZgG518BPEgKZgASnACu+IVQDeqMGBIBDfAAsAXGAIAnAJbYA5gBo5YLAFsSOAdnwaAYmOwZ8OnMfl6AJgIAeoiQIA-Br+ku6mKjownqECuMEi4pIA2gC6qAC+3Ki+llqEUI7OrtimWgLKArG4dGAhSUKy8uX4YlqlTfKmcBZWNhqkJOHySqoaAOTA44ZgJvIYkdHVGsnSGenyWZlAA
вот пример

Vladimir
30.08.2016
17:23:28
конкретный код, конкретная ошибка, тайпскрипт пропускает

Aleh
30.08.2016
17:23:43
@vkurchatkin https://www.typescriptlang.org/play/index.html#src=class%20A%7B%7D%0D%0Aclass%20B%20extends%20A%7B%20test()%7B%7D%20%7D%0D%0A%0D%0Alet%20a%3A%20A%5B%5D%2C%20b%3A%20B%5B%5D%3B%0D%0Aa.push(new%20A)%3B%0D%0Ab.push(new%20B)%3B%0D%0Aa%20%3D%20b%3B%0D%0Aa.push(new%20A)%3B
вот проще пример
это все одно же

Vladimir
30.08.2016
17:23:58
не, это не тоже самое

Nikita
30.08.2016
17:23:59
я понимаю, что flow вообще там полмира обсчитывает. Но можно было бы принять, что тип скорее всего правильно описан, а переменная - нет

Vladimir
30.08.2016
17:24:18
не, тут ошибка правильно)
просто подсветка в редакторе странная

Nikita
30.08.2016
17:24:46
попробуй в консольке)

Google

Nikita
30.08.2016
17:24:49
тоже самое

Vladimir
30.08.2016
17:24:53
да-да
Property not found in object literal, и указывает на литерал

Nikita
30.08.2016
17:25:16
должен на сам объект материться, а матертися на тип. идиотизм

Vladimir
30.08.2016
17:25:27
все нормально, но подсветка на первой строке

Nikita
30.08.2016
17:25:33
главное, что когда код пишешь, ощущение, что все ок. А потом внезапно 100500 ошибок

Vladimir
30.08.2016
17:25:34
да, это известный косяк

Nikita
30.08.2016
17:26:14
а еще если хочешь полностью все типизировать

Дмитрий
30.08.2016
17:26:46
конкретный код, конкретная ошибка, тайпскрипт пропускает
Имплементация пустого интерфейса - это ты из Go взял что ли?))
В твоем случае B совместим с A
https://www.typescriptlang.org/play/index.html#src=interface%20A%20%7B%0D%0A%09doom()%3A%20void%0D%0A%7D%0D%0A%0D%0Ainterface%20B%20%7B%0D%0A%20%20%20%20boom()%3A%20void%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20test(fn%3A%20(a%3A%20A)%20%3D%3E%20void)%20%7B%0D%0A%20fn(%7B%7D)%0D%0A%7D%0D%0A%0D%0Avar%20a%3A%20A%20%3D%20%7B%7D%0D%0A%0D%0A%0D%0Avar%20fn%20%3D%20(b%3A%20B)%20%3D%3E%20b.boom()%3B%0D%0A%0D%0Atest(fn)
Я добавил всего один метод в твой полезный пустой интерфейс и всё начало подчеркиваться

Nikita
30.08.2016
17:26:46
type AuthStartAction = {type: 'AUTH_START', ...} - вот из таких экшнов надо будет составить огромный union и пихнуть в дженерик стора

Aleh
30.08.2016
17:26:57
не, это не тоже самое
https://www.typescriptlang.org/play/index.html#src=class%20A%7B%7D%0D%0Aclass%20B%20extends%20A%7B%20test()%7B%7D%20%7D%0D%0A%0D%0Alet%20a%3A%20A%5B%5D%2C%20b%3A%20B%5B%5D%3B%0D%0Aa.push(new%20A)%3B%0D%0Ab.push(new%20B)%3B%0D%0Aa%20%3D%20b%3B%0D%0Aa.push(new%20A)%3B%0D%0Ab.forEach(%20i%20%3D%3E%20i.test()%20)%3B
ну хз

Vladimir
30.08.2016
17:27:51
> Имплементация пустого интерфейса - это ты из Go взял что ли?
не вижу проблемы ну да ладно
теперь вот так: https://www.typescriptlang.org/play/index.html#src=interface%20A%20%7B%0D%0A%09doom()%3A%20void%0D%0A%7D%0D%0A%0D%0Ainterface%20B%20%7B%0D%0A%09doom()%3B%20void%0D%0A%20%20%20%20boom()%3A%20void%0D%0A%7D%0D%0A%0D%0A%0D%0Afunction%20test(fn%3A%20(a%3A%20A)%20%3D%3E%20void)%20%7B%0D%0A%20fn(%7B%20doom()%20%7B%7D%20%7D)%0D%0A%7D%0D%0A%0D%0A%0D%0A%0D%0Avar%20fn%20%3D%20(b%3A%20B)%20%3D%3E%20b.boom()%3B%0D%0A%0D%0Atest(fn)
> В твоем случае B совместим с A
Но не наоброт в том и проблема

Aleh
30.08.2016
17:43:39
@vkurchatkin у flow нет implements?

Vladimir
30.08.2016
17:43:59
Нет, зачем?
Это для номинальной типизации нужно

Aleh
30.08.2016
17:44:14
для явности)
это самый простой способ при изменении интерфейса видеть, где надо реализации поправить

Google

Aleh
30.08.2016
17:44:54
а не ловить неправильные вызовы

Vladimir
30.08.2016
17:45:54
Ну если у тебя в коде где то реализация присваивается к интерфейсу, то так и будет

Aleh
30.08.2016
17:46:33
да, я понимаю, но удобнее было бы видеть ошибку типа "неправильно реализован интерфейс в классе ..."
и это простой способ этого добиться
хотя хз, может это привычка

Vladimir
30.08.2016
17:47:44
Ну, для удобства - да

Aleh
30.08.2016
17:49:13
а можно сказать flow, чтобы запускался для файлов .ts ?)
и .tsx

Vladimir
30.08.2016
17:50:03
Не думаю

Mike
30.08.2016
20:01:23
нашёл таки понятное описание

Vladimir
30.08.2016
20:03:00
бред

Oleg
30.08.2016
20:03:01
export interface ISomeProps {
SomeComponent: React.Component<IConfirmDialogProps, any> | React.StatelessComponent<IConfirmDialogProps> | React.ClassicComponent<IConfirmDialogProps, any>
}
error TS2604: JSX element type 'SomeComponent' does not have any construct or call signatures.
Какие предложения?

Vladimir
30.08.2016
20:03:15
оюъяснение про массивы - понятно, но причем здесь функции?
массивы можно считать ковариантыми, если ты мамой клянешься, что только читаешь
функции нельзя считать ковариантными относительно аргументов никогда

Mike
30.08.2016
20:06:02

Dmitry
30.08.2016
22:32:33
привет, кто-нибудь настраивал breakpoint на node и ts в visual studio code, уж очень хочется :)
нашел решение, как завести breakpoints и sourcemap на node/typescript + webpack, искал долго, так что держите, может пригодится
http://stackoverflow.com/questions/36470946/debug-webpack-bundled-node-ts-with-visual-studio-code

Ҫѐҏӗѫӑ
31.08.2016
02:08:08
https://twitter.com/typescriptlang/status/770655712183590912

Google

Ҫѐҏӗѫӑ
31.08.2016
02:10:47
+ в майлстоунах теперь нет 2.0.1, а есть 2.0.3 и 2.0.5

Oleg
31.08.2016
04:28:14
как кто указывает класс реактового компонента свойству в интерфейсе? React.StatelessComponent все ломает.
export interface ISomeDocFormProps {
ConfirmDialog: IConfirmDialog
}
export type IConfirmDialog = React.ComponentClass<IConfirmDialogProps> | React.ClassicComponentClass<IConfirmDialogProps>
OK
но при добавлении | React.StatelessComponent<IConfirmDialogProps> получаю
error TS2604: JSX element type 'ConfirmDialog' does not have any construct or call signatures.
как указать типизированную Stateless Function Component свойству
Ну все как умерли
Следующий вопрос. Нужны миксины с рабочим instanceof. Кто чем пользуется или как решает проблемы композиции

Дмитрий
31.08.2016
15:05:43
type guards
isFile(): this is File { return this instanceof File; }

Oleg
31.08.2016
15:06:50
Нужны примешивания классов с рабочим instanceof

Aleh
31.08.2016
15:08:15
instanceof а причём тут ts?

Oleg
31.08.2016
15:08:54
На ts
В идеале декоратором

Vladimir
31.08.2016
16:46:46
https://www.youtube.com/watch?v=Qiqsg02nXFE

Roman
31.08.2016
16:47:18
сидим уже наготове

Ҫѐҏӗѫӑ
31.08.2016
16:59:34
пните меня когда начнется плз

Vladimir
31.08.2016
17:04:14
вроде начинается

Oleg
31.08.2016
17:09:53
Когда я вижу что никакими костылями не получить миксины с работающим instanceof в ts, я думаю ну почему, почему dart не смогли нормально распиарить
Все ведь как положено. class Marstro extends Person with Musical, Aggressive, Denented {}

Aleh
31.08.2016
17:22:18
а зачем это нужно?

Alexander
31.08.2016
17:23:46

Google

Oleg
31.08.2016
17:25:46
из декларации не видно? Собирать классы по поведению, а потом в зависимости от этого строить в том числе и интерфейс.

Vladimir
31.08.2016
17:29:37
для этого нужны типы в рантайме

Alexander
31.08.2016
17:31:14
т. е. не нужны

Vladimir
31.08.2016
17:34:29
абрамов чет пришел

Aleh
31.08.2016
17:35:07

Oleg
31.08.2016
17:36:28
Реальных кейсов овердохрена
И ts это появится, только хз когда
Они спред уже второй год не могут сделать

Ҫѐҏӗѫӑ
31.08.2016
17:38:36
спред даже не на 3 стейдже кагбэ

Vladimir
31.08.2016
17:38:40
какие кейсы, например?

Ҫѐҏӗѫӑ
31.08.2016
17:38:45
и там не все так просто

Oleg
31.08.2016
17:39:19
Да понятно что вывести типы при таком динамизме не просто
какие кейсы, например?
Ты человек идущий, думающий, значит есть у тебя действия идти и думать, которые изменяют состояние положение и температура мозгов. И когда я открываю твою карточку в виде реактового контрола, то там автоматом только две кнопки - думать и идти. А все потому что когда я тебя собирал класс ДумающийИИдущийЧеловек расширяющий Человек вместе с Думающий и Идущий

Дмитрий
31.08.2016
17:47:33
Извините))

Aleh
31.08.2016
17:47:50

Дмитрий
31.08.2016
17:47:51
Но вообще это делается композицией

Aleh
31.08.2016
17:48:07

Дмитрий
31.08.2016
17:48:53
JS вообще изначально на прототипах, сам боженька велел делать всё композицией))