
Andrew
13.07.2017
10:43:46
народ, кто-нибудь знает, почему в первом случае компилятор не может вывести тип для done?
https://gist.github.com/impworks/5705f2c55327b73884aba3157685fe04

Friedrich
13.07.2017
10:45:44
Я, я, можно я отвечу?

Andrew
13.07.2017
10:46:53
Жги!

Google

Friedrich
13.07.2017
10:47:11

Andrew
13.07.2017
10:47:50

Friedrich
13.07.2017
10:47:53
А, тут даже ещё лучше: тебе не нужна первая сигнатура.

krn
13.07.2017
10:47:58
конпелятор ><

Friedrich
13.07.2017
10:48:37
Дело в том, что любая функция типа () => void будет подходить под сигнатуру (done: () => void) => void. И для этого как раз причина внятная: любой функции разрешено игнорировать аргументы.

Andrew
13.07.2017
10:49:18
Это-то понятно, но я удивлен что он выбрал не наиболее подходящий тип, а первый в порядке следования

Friedrich
13.07.2017
10:49:37
Поэтому всё, что ты хочешь, делается сигнатурой № 2. Объявление type JasmineAssertion = (() => void) | ((done: () => void) => void) также не имеет смысла, поскольку второй терм покрывает первый.

Andrew
13.07.2017
10:50:32
а, ну тащемта они в последней версии так и сделали - просто оставили везде (done: DoneFn) => void
я бы предположил что без указания done? оно должно если не прям ругаться, то хотя бы ворчать

Friedrich
13.07.2017
10:51:13
Скорее всего, FAQ как раз обсуждал эту самую ситуацию, в которую ты попал.

Dmitry
13.07.2017
20:37:28
бандиты, а я че не могу делать extend interface во flow?
и optional параметры в interface нет?

Google

Дмитрий
14.07.2017
04:29:07
Делаешь что то не так

Karl
14.07.2017
10:53:37
начал тут вкуривать в плов, и наткнулся на любопытную вещь
https://flow.org/en/docs/types/arrays/#toc-array-access-is-unsafe
вопрос, как я понял в ts тоже так? это правда

Aleh
14.07.2017
10:54:41
спс
все это оч условно

Дмитрий
14.07.2017
10:57:25

Aleh
14.07.2017
11:00:19

Дмитрий
14.07.2017
11:00:53
Ну тогда лан)

Летучая
14.07.2017
11:01:07
надо явно определять классы ?

Karl
14.07.2017
11:01:28
а если мне надо сделать по массиву find, а он может вернуть или эл-т типа или undefined - как быть?
объявлять тип со знаком "?" ?

Дмитрий
14.07.2017
11:01:35
Хотя
Надеялся что в ts так же ?

Aleh
14.07.2017
11:05:12

Karl
14.07.2017
11:06:45
угу, но если я это забуду сделать, flow это благополучно скушает
а потом жди беды

Google

Дмитрий
14.07.2017
11:08:06
find возвращает ?T тип
T | void, если быть точным

Aleh
14.07.2017
11:09:31

Karl
14.07.2017
11:13:07
ага, я был неправ, сам проверил
https://flow.org/try/#0C4TwDgpgBAKlC8UDeAoAkAQwFxQHYFcBbAIwgCcUBfFFAYwHtcBnYKAGwEsWcBBMsjCAA8MAHwIoAbRRRk2KAEZKAGjk4ATCrVQAzNQC6AbhoNmrAG4Y2+CDjiJOLAHQAzDrgAmACi+XrEAEoEcT8bJwwocQUABgDjOkYWKDIIJnw2YBwCEnIJUIhwwyA
а если я юзаю find из лодаша, мне надо его .. ээ.. тайпдефы подключить?

Дмитрий
14.07.2017
11:14:05
Ага
flow v50
- Added `$Values type`
Еее, свершилось

Karl
14.07.2017
11:14:48
а что это такое? если не для посвященных

Дмитрий
14.07.2017
11:14:58
make flow great again ?
Это прям хреновое отставание было

andretshurotshka?❄️кде
14.07.2017
11:16:17
теперь тс не нужен?

Дмитрий
14.07.2017
11:17:43
Как opaque types релизнут, так сразу))
Я всё же уверен, что это именно то, что нужно для полноценного описания функтора ?

andretshurotshka?❄️кде
14.07.2017
11:18:20

Дмитрий
14.07.2017
11:18:58
А какие ещё бывают?) ?

Vladimir
14.07.2017
11:19:16
$Values абсолютно бесполезен

Дмитрий
14.07.2017
11:19:39
Не сомневался

Aleh
14.07.2017
11:19:52
почему?

Google

Karl
14.07.2017
11:20:04

Vladimir
14.07.2017
11:20:12
Да просто факт, ничего особо полезного нельзя с ним делать

Дмитрий
14.07.2017
11:20:41
*по моему мнению
А так же $ElementType, тоже абсолютно бесполезен. Целый пакет бесполезных типов, кошмар

Admin
ERROR: S client not available

Vladimir
14.07.2017
11:23:21
Пример использования $Values в студию

Aleh
14.07.2017
11:24:23
я юзаю mapped types чтобы сделать поля типа имутабельными или чтобы сделать nullable
в тестах, чтобы описывать стабы

Дмитрий
14.07.2017
11:25:46

Aleh
14.07.2017
11:26:11
синтаксис $Values еще не смотрел, поэтому не знаю как описать это

Karl
14.07.2017
11:26:34
я чето вообше синтаксис $Values не могу найти
даже в сорцах уже порылся, может плохо, конечно

Vladimir
14.07.2017
11:26:50
Окей, переформулирую для особо доебистых: мне лично неизвестны примеры использования $Values

Дмитрий
14.07.2017
11:27:40
Ну не прикидывайся валенком то
type DictProps = $Values<{ a: boolean, [key: string]: number }>;
('yo': DictProps); // Error: There is no property with the type of string.
(123: DictProps); // OK: There is a dictionary value with the type of number.
(true: DictProps); // OK: There is a property with the type of boolean.

Летучая
14.07.2017
11:28:12
$phlow

Vladimir
14.07.2017
11:28:14
Я имею в виду реальный пример из жизни

Aleh
14.07.2017
11:28:42

Дмитрий
14.07.2017
11:29:12
Я взял первый по порядку пример из тестов

Aleh
14.07.2017
11:29:21
это keyof и T[K]

Google

Vladimir
14.07.2017
11:31:09
Пока что я видел достаточно людей, радующийхся $Values (и некоторым другим фичам), но не понимающим как они работают

Karl
14.07.2017
11:31:51
хм, действительно $Values это не mapped type из ts (как я понял из примера)

Дмитрий
14.07.2017
11:32:20
Понимаешь, как бы так покорректнее выразиться, очередное "этовсёхуй" без доказательств слегка раздражает

Aleh
14.07.2017
11:33:25
https://www.typescriptlang.org/play/index.html#src=type%20%24Values%3CT%3E%20%3D%20T%5Bkeyof%20T%5D%0A%0Atype%20DictProps%20%3D%20%24Values%3C%7B%20a%3A%20boolean%2C%20b%3A%20number%20%7D%3E%0A%0A

Дмитрий
14.07.2017
11:33:27
Потому что не является хоть сколько нибудь полезным сообщением

Aleh
14.07.2017
11:33:56

Vladimir
14.07.2017
11:34:38

Дмитрий
14.07.2017
11:35:50
Блин, это так не работает. Ты как очевидно более осведомлённый в состоянии это объяснить без примеров или не в состоянии

Artur
14.07.2017
11:36:14
Я использую mappedTypes для описания форм. Как то так:
interface Entity {
a: string
b: number
}
interface Form<T> {
get<K extends keyof T>(prop: K): T[K]
set<K extends keyof T>(prop: K, value: T[K]): this
bind<K extends keyof T>(prop: K): {value: T[K], onChange: (newValue: T[K]) => void}
}

Karl
14.07.2017
11:36:55
хм, ну это же не $Values, как написал товарищ выше

Vladimir
14.07.2017
11:37:16

Artur
14.07.2017
11:37:18

Aleh
14.07.2017
11:37:31
вот как в тестах для стабов юзаю
type Stubbed<T> = {
[K in keyof T]: T[K] & Stub
}