
kana
14.06.2018
15:01:53

Aleh
14.06.2018
15:02:00

Artur
14.06.2018
15:02:09
Так, ещё там есть Nothing

kana
14.06.2018
15:02:12
как это относится к never/empty/hs-void, у которого нет значений вообще?

Google

kana
14.06.2018
15:02:25
data Unit = Unit
data Void

Artur
14.06.2018
15:02:25
Nothing is a subtype of every other type (including scala.Null); there exist no instances of this type.
no instances of this type

Aleh
14.06.2018
15:02:40
похоже

kana
14.06.2018
15:03:25

Ruslan
14.06.2018
15:03:25

Сергей
14.06.2018
15:04:08
адово

kana
14.06.2018
15:04:42
если инетерсна теория, можно прочитать примитивно у Бартоша в терминальный и инициальных объектах категорий

Сергей
14.06.2018
15:05:21
открыл сундучок блэд…
но тс все равно говно
?

kana
14.06.2018
15:05:37
https://henrychern.files.wordpress.com/2017/10/05.pdf

Алексей
14.06.2018
15:05:41

Google

Сергей
14.06.2018
15:05:45

dima
14.06.2018
15:06:29

Сергей
14.06.2018
15:06:41

kana
14.06.2018
15:06:49
что за книга ? Есть фул ?
https://henrychern.wordpress.com/2017/07/17/httpsbartoszmilewski-com20141028category-theory-for-programmers-the-preface/

Сергей
14.06.2018
15:07:03
Дима показывал кейс с невыводом типов, че-то там про Animal )

kana
14.06.2018
15:07:08
тут по главам. Я делал давно склейку всех глав, но не уверен, что там ничего не обновилось

Сергей
14.06.2018
15:08:46
а как в тс вариативность указывать?

Aleh
14.06.2018
15:09:11
никак

Сергей
14.06.2018
15:09:17
или там из-за структурной типизации это “не нужно”

kana
14.06.2018
15:09:27
что значит вариативность?

Сергей
14.06.2018
15:09:51

Aleh
14.06.2018
15:10:30
> docs/lang
> lang
ыы

Сергей
14.06.2018
15:10:30

kana
14.06.2018
15:10:44
а, вариантность

Anton
14.06.2018
15:10:50
вариантность :) никак) можно только попросить TS строже проверять

Сергей
14.06.2018
15:10:51
бля, точно
опфть слова путаю блчдь

Artur
15.06.2018
07:18:49
type Parameters<T extends Function> = T extends (...args: infer U) => any ? U : any[];
type T1 = Parameters<(a: number, b: string[]) => void>; // [number, string[]]
Огонь же!

Dmitrii
15.06.2018
07:24:44
где можно почитать про infer ?

Google

Artur
15.06.2018
07:28:53

Max
15.06.2018
07:41:05

Artur
15.06.2018
07:41:18
Если что так делать ещё нельзя даже в мастере ts :)

Max
15.06.2018
07:41:53
Srsly?
Ну да. С 2.8 ) или я чёт путаю?

Artur
15.06.2018
07:42:12

Max
15.06.2018
07:42:36

Artur
15.06.2018
07:42:49
Работает только начиная с неправославного надругательства над tuple https://github.com/Microsoft/TypeScript/pull/24897

Max
15.06.2018
07:43:20
Аа, кортеж. Слепой, сорян. ща читну, спасибо

George
15.06.2018
08:59:09
Привет! Как в интерфейсе сделать что-то такое: interface A<K<T>> {} - чтобы получить доступ к параметру-дженерику и его параметру?

Artur
15.06.2018
09:00:11
https://github.com/Microsoft/TypeScript/issues/1213
Вот вроде ишшью на эту тему

George
15.06.2018
09:02:46
Печаль :(

Alexander
15.06.2018
09:51:21
Господа, а есть в TS *правильный* способ пихать классы в генерики?
Вот, например:
class MyType {
constructor() {...}
}
class MyAdvancedType extends MyType {
constructor() {...}
}
class WorkerWithTypes<T extends MyType> {
constructor() {
let instance = new T(); // И ВОТ ТУТ ОШИБКА: 'T' only refers to a type, but is being used as a value here.
}
}
Что я делаю не так? Почему внутри класса-генерика я не могу создать тот самый генерик, если я объявил, что он наследуется от заявленного типа? И как такое делать правильно?

kana
15.06.2018
09:52:37
типы и значения
ты не можешь их смешивать. Ты же не можешь сделать const x = number.

Alexander
15.06.2018
09:54:16
я понимаю. Но какого фига я не могу сделать new T(), если я въявную указал, что T -- это таки тип? ну да, понятно: потому, что формально new T -- это вызов значения. Почему компилятор жалуется -- понятно. Как подобное делать?

Aleh
15.06.2018
09:54:25

kana
15.06.2018
09:54:41

Google

Alexander
15.06.2018
09:54:43

kana
15.06.2018
09:54:49
с классами то же самое
class X { }

Сергей
15.06.2018
09:54:56

kana
15.06.2018
09:55:01
тут создается две сущности
X - тип, он живет только на типах
X-функция, которая при new создает объект там
они имеют одинаковое имя, но живут в разных мирах, один на уровне значений (поэтому можем его вызвать), другой на уровне типов (поэтому мы можем указывать тип значений, созданных конструктором)

Alexander
15.06.2018
10:01:45
мде, "это вам не плюсы" =) Спасибо, господа. Так и сделаю

kana
15.06.2018
10:02:31

Alexander
15.06.2018
10:02:59
не, значение мне нельзя. Я хочу разделить фабрику объектов и сам объект

Сергей
15.06.2018
10:03:03
бля
хватит уже упарываться по ебаному ооп в жс
огребешь потом по полной из-за производительности
ну не работают жавовские подходы в жс
осознайте это уже
нельзя взять свои привычки из других языков, притащить это в жс и верить что так правильно
это блядь не так
ни один фронтендер потом не разберется в тысячах фабрик и глубоком наследовании
проект просто будут вынуждены выкинуть и написать заново

Google

Sunlive
15.06.2018
10:04:26
☝️ежжи

Сергей
15.06.2018
10:04:26
или поддерживать это всё с дикой болью

Алексей
15.06.2018
10:04:47
ооп != глубокое наследование и тысячи фабрик фабрик

Aleh
15.06.2018
10:05:16
Жаваговно на жс еще говнянее чем на жаве, поэтому не делайте жаваговно на жс

Timofey
15.06.2018
10:05:17

Сергей
15.06.2018
10:05:26
только объясни это джавистам

Aleh
15.06.2018
10:05:40

kana
15.06.2018
10:05:47

Сергей
15.06.2018
10:05:50

kana
15.06.2018
10:05:58
ну да

Сергей
15.06.2018
10:06:02

kana
15.06.2018
10:06:09
у джавистов процедурщина с локальным скоупом

Сергей
15.06.2018
10:06:20

Алексей
15.06.2018
10:06:23
всякие котлины появляются
да и в джаву лямбды завезли

Aleksei
15.06.2018
10:07:45
и модули