
Дмитрий
23.11.2017
14:11:37

Mike
23.11.2017
14:11:44
у нас тут в соседнем отделе на плюсах такие конструкции заворачивают

Aleh
23.11.2017
14:11:46

Mike
23.11.2017
14:12:06
babel
а что бабель, у меня свои код трансформы есть, это не проблема. В языке бы из коробки

Google

Дмитрий
23.11.2017
14:12:18
Ну кстати вообще полнота для генерации реально не необходимое и даже не обязательное условие

Le
23.11.2017
14:12:28

Aleh
23.11.2017
14:12:29
так подожди, что хорошего дает тьюринг-комплит система типов?

Дмитрий
23.11.2017
14:12:31
У тебя есть коробка)

Mike
23.11.2017
14:13:24
Зачем?
я тайпскриптом один язык в другой компилю. Flash -> typescript. И компилятор ts использую как платформу, у него api для ast трансформов есть. Не сказать чтоб шибко удобное, но есть

Сергей
23.11.2017
14:13:59

Aleh
23.11.2017
14:14:08

Сергей
23.11.2017
14:14:09
мыло на шило

andretshurotshka?❄️кде
23.11.2017
14:14:11

Сергей
23.11.2017
14:14:23

Дмитрий
23.11.2017
14:14:25

Mike
23.11.2017
14:14:27

Google

Дмитрий
23.11.2017
14:14:57
Я просто не понимаю кейса "давайте сделаем хитровывернутые конструкции чтобы было похоже на настоящий язык" когда ты теперь и так можешь просто юзать код для генерации)

Mike
23.11.2017
14:15:45

andretshurotshka?❄️кде
23.11.2017
14:16:43
идрис))

Ҫѐҏӗѫӑ
23.11.2017
14:27:55
мифический язык, на котором ничего нет
и вот этот интерпретатор — это ж ваще полный провал
зачем он там?

Mike
23.11.2017
14:31:49
чтобы метапрограммить, кодогенерировать и писать на этом же языке генерацию его самого, чтоб не извращаться как на плюсах. Ещё чтобы для заранее известных констант предпосчитать всё и тп

Ҫѐҏӗѫӑ
23.11.2017
14:32:11
это провал

Mike
23.11.2017
14:32:24

Ҫѐҏӗѫӑ
23.11.2017
14:32:27
как оно работает? там интерпретатор или компиляция?
во время исполнения
которое либо компили при исполнении, либо с недоинтерпретатором

Mike
23.11.2017
14:46:56
не хочешь - не ешь. Никто же не навязывает тебе такое делать

Ҫѐҏӗѫӑ
23.11.2017
15:02:22
но все мы знаем, что если есть возможность сделать говно, то кто-то его обязательно сделает
иначе бы нас в этом чате не было

Max
23.11.2017
15:02:44
пойду сделаю говно

Alex
23.11.2017
15:14:13
https://img-9gag-fun.9cache.com/photo/a1Kgv56_700b.jpg

Le
23.11.2017
15:48:46
export type Optional<O, K extends keyof O> = Pick<O, Omit<keyof O, K>> & Partial<Pick<O, K>>;

Google

Le
23.11.2017
15:48:49
уфффффф
черная магия
import { ObjectOverwrite as Overwrite, StringOmit as Omit } from 'typelevel-ts';
export type Optional<O, K extends keyof O> =
Pick<O, Omit<keyof O, K>> & Partial<Pick<O, K>>;
export type OptionalCommandInfo = Partial<Overwrite<CommandInfo, {
args: Optional<ArgumentInfo, 'prompt'>[];
}>>;

andretshurotshka?❄️кде
23.11.2017
16:00:33
эт че

Le
23.11.2017
16:01:08
это мне надо было сделать одну пропертю опциональной в ArgumentInfo
пришлось магию осваивать ?

andretshurotshka?❄️кде
23.11.2017
16:01:44
))

Le
23.11.2017
16:02:35
ну и в CommandInfo опциональным вообще всё

Artur
23.11.2017
16:05:22
Ребза, привет. А есть способ сделать nullable не nullable?
Пример:
type Indexed<T = {}> = {[key: string]: T}
type Extract<T extends Indexed, K extends string> = {
data: T[K]
}
// ...
interface Foo {
bar: {baz: number} | null
}
type ExtractedBar = Extract<Foo, 'bar'> // type null is not assignable to type {}
Не хочется потом использовать что-то вроде
const bar = this.data! // ExtractedBar

Дмитрий
23.11.2017
16:07:55
Через Maybe<T> работать

Aleh
23.11.2017
16:09:27

Дмитрий
23.11.2017
16:09:42

Aleh
23.11.2017
16:09:48
а каким образом поможет?

Artur
23.11.2017
16:09:50
Ну как бы да, у меня просто механизм который чекает структуру перед тем как передать дальше

Дмитрий
23.11.2017
16:09:50
Он именно для этого и предназначен

Artur
23.11.2017
16:09:59
А вот дальше она должна быть не nullable
На счет maybe - не получится

Дмитрий
23.11.2017
16:10:33
fromNullable(value)
.map( safeType => )

Artur
23.11.2017
16:10:36
Это GraphQL сгенерированные типы

Google

Aleh
23.11.2017
16:10:49

Дмитрий
23.11.2017
16:10:54
Аа, ну там свои приколюхи

Artur
23.11.2017
16:11:08
Вида
type TypeName = {
ns1: {
ns2: struct...
}
}
Иногда бывает, что ns2: {...} | null

Дмитрий
23.11.2017
16:11:49

Aleh
23.11.2017
16:12:02
у него есть Maybe<T>, а нужен T

Сергей
23.11.2017
16:12:12

Artur
23.11.2017
16:12:12
Может я не догоняю, но да, мне нужно обратное от Maybe

Admin
ERROR: S client not available

Artur
23.11.2017
16:12:15
Sure<T>

Сергей
23.11.2017
16:12:26

Artur
23.11.2017
16:12:59
AreYouSure<T>
Причем для const foo = this.data! можно хотя бы так сделать, а для типа type Foo = Maybe<Foo>! не сделаешь

Дмитрий
23.11.2017
16:15:16
Может я не догоняю, но да, мне нужно обратное от Maybe
Нет, Maybe<T> — это на самом деле структура которая имеет два типа (даже класса)
type Maybe<T> = Just<T> | Nothing<T>
И фича в том что применение функции fromNullable делит данные на две категории, оставляя внутри .map только безопасные для использования значения
Это для любого типа унифицированная идея
У тебя просто по определению в map не будет нуллов

Artur
23.11.2017
16:17:23
Хм, наверное я тупой, но не очень понимаю как это применить в рамках react компонента

Сергей
23.11.2017
16:18:10

Дмитрий
23.11.2017
16:18:24
Вот поэтому я это и написал

Google

Сергей
23.11.2017
16:18:36
оо
а @apropos/maybe публичен?
классно, спасибо!!!

Дмитрий
23.11.2017
16:19:31
Да, плюс я через основной неймспейс юзаю 'apropos'

Сергей
23.11.2017
16:19:55
о
core
тоже так сделал у себя)

Дмитрий
23.11.2017
16:21:15
Как минимум все остальные упускают из вида главное — это два простых типа одновременно, ввиду чего меня прям коробило видеть реализации Maybe с проверками isJust() в каждом методе :(
А у меня в о многих случаях объекты проходят bypass, и получается максимально дешёвая структура, просто объект { value }

Aleh
23.11.2017
16:21:46
сделать полиморфную структуру без полиморфизма ?

Дмитрий
23.11.2017
16:22:15

Сергей
23.11.2017
16:22:43

Дмитрий
23.11.2017
16:23:12

Aleh
23.11.2017
16:23:42
ну если их много и дублируются, можно всегда сделать третий тайп, в котором общие вещи лежат)

Дмитрий
23.11.2017
16:24:15
Здесь декораторы юзаются потому что формально не меняют тип класса. Это просто вызовы интеропа с системой типов sanctuary и fantasy-land
Ввиду чего нет смысла экономить на спичках и пытаться обобщить их, лучше уже с их помощью обобщения делать)

Artur
23.11.2017
16:27:17
Посмотрел, не понял как это в моем случае поможет.

Евгений
24.11.2017
06:32:34
Ребят, уже писал по поводу яндекс карты. У меня тут неловкий вопрос. Как правильно подключить @types/**** чтобы это потом вошло в релизную сборку. Ибо в отладке у меня все нормально работает, но когда деплою, не находится этот модуль
то есть по сути в релизной сборке не видны декларации