@typescript_ru

Страница 54 из 669
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
Вообще это скорее всего баг, даже по меркам тайпскрипта
нет не баг, специально так сделано, и описано почему https://github.com/Microsoft/TypeScript/wiki/FAQ#why-are-function-parameters-bivariant

нашёл таки понятное описание

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
оюъяснение про массивы - понятно, но причем здесь функции?

массивы можно считать ковариантыми, если ты мамой клянешься, что только читаешь

функции нельзя считать ковариантными относительно аргументов никогда

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
Извините))

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

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

Страница 54 из 669