@typescript_ru

Страница 585 из 669
Vlad
24.04.2018
05:24:03
Пример.

Alex
24.04.2018
05:24:30
new Some({ a, b })

Vlad
24.04.2018
05:24:35
Ща.

Тогда у нас некоторая проблема, которую мы попробуем решить :)

Google
Alex
24.04.2018
05:26:32
Т.е. В конструкторе что-то типа constructor(props: IProps<T>)

Vlad
24.04.2018
05:28:36


Эту проблему удалось решить, пожертвовав точным типом мембера b.

Как оттипизировать "b" в классе, а не в сигнатуре, я не знаю. Идей нет.

Но от того, что работает typeof obj.a я сам офигел. Работает.

Этого _точно_ нет в документации, но это невероятно круто, и это укладывается в логику языка.

Alex
24.04.2018
05:33:12
Да в документации базовые примеры, многие вещи не очевидны

Vlad
24.04.2018
05:45:24
Да в документации базовые примеры, многие вещи не очевидны
Да мы, в общем, сейчас шаримся по глубоким подземельям системы типов TypeScript. Ща истерики пойдут. "Никогда не делайте так в продакшне, а то я как увижу такое так нихрена не пойму и у меня глаза вытекут".

Дмитрий
24.04.2018
05:51:10
Никаких истерик сейчас конечно же не будет

Потому что с большой долей вероятности вы будете разбирать свою клинопись, матерясь, сами)

Но тогда переживать уже будет поздно

Vlad
24.04.2018
05:58:26
LOL :D

Нормально, разберем, не переживайте. ? Это довольно простой код для того, кто умеет его читать. Тем более для того, кто умеет его писать. Вопрос тренировки, в которой некоторые себе отказывают.

Google
Дмитрий
24.04.2018
07:22:03
К этому коду кстати особо претензий нет) Просто будет не лишним помнить, что чем меньше эзотерики в коде — тем проще поддерживать проект

Vlad
24.04.2018
07:24:59
Просто понятие эзотерики у нас немного разное.

Но шансов такое написать в гражданском проекте у разраба немного. Это все-таки очень далеко от шаблонной рекурсии С++, которую во-первых умелец может воткнуть куда угодно, и которая во-вторых вычислительно полна в момент компиляции.

И которая потому открывает врата в ад, а тут их нет.

Собственно, после С++ толковые авторы языков специально следят за тем, чтобы их система типов совершенно случайно не получилась вычислительно полна.

А посему - нехрен истерить. Все нормально.

Хотя, ацкий паттерн expression templates в C++ - это был весьма полезный трюк, который позволял делать частичные вычисления. ? Но в TS такого нет. Расслабьтесь.

D
24.04.2018
07:50:38
Вычислительна полна это по Тьюрингу? Тогда система типов тс именно к такой и относится

Alexander
24.04.2018
08:21:35
Влад, ты первый сказал, что не полна, так что бремя доказательства лежит на тебе

Vlad
24.04.2018
08:21:51
Жжоте :)

Alexander
24.04.2018
08:22:05
Давай пацан сказал — пацан доказал

Vlad
24.04.2018
08:25:32
Воздержусь ? Подожду, когда кто-нибудь машину Тьюринга на типах TS изобразит ? Или, на худой конец, нормальные алгорифмы Маркова - тодже сойдет ?

Али не пацаны? :)

Alex
24.04.2018
08:27:15


гоу усложним задачу, есть интерфейс с generic типом, нужно установить зависимость между его полями

Artur
24.04.2018
08:27:22
Да ладно. Пруф?
https://github.com/Microsoft/TypeScript/issues/14833

Vlad
24.04.2018
08:28:34
No fuckin way :)

Блядь, извращенцы. Все пропало. Она, по ходу, таки вычислительно полна.

Google
Artur
24.04.2018
08:31:35
Ну так а в чём печаль то?

Alexander
24.04.2018
08:34:10
Влад, ты не прав)

Vlad
24.04.2018
08:36:07
Ну, тикет интересный. С тем, насколько он действительно означает вычислительную полноту, мы разберемся на днях. Тут думать надо.

Это любопытнейший теоретический вопрос, практические выводы из которого рано или поздно последуют, и если она таки полна, то мало вам не покажется.

Vitaliy
24.04.2018
08:45:44


чекнул ваш пример

Vlad
24.04.2018
08:48:28
И он не проверяет точный тип переменной. Вижу.

А, ну понятно почему. keyof C это все ключи C, то есть, "g" | "k"

Соответственно, C[ typeof a ] это все типы этих свойств С, то есть number | string

Это конечно лучше, чем совсем ничего. Но недостаточно хорошо.

Чтобы был точный "g", надо писать extends. Что можно сделать только введя параметр шаблона.

Ну тогда ой - с конструктором так точно нельзя (ему давать параметры шаблона запрещено), и с фабричным методом create - тоже нельзя, там надо давать или все параметры шаблона, или ни одного, и если не дать ни одного, то С не выведется.

Aleh
24.04.2018
09:05:16
Vlad
24.04.2018
09:08:05
Виснуть будет)
Печаль не в этом. Если оно полно, то рано или поздно, начнут отжигать, как в С++. А вот этого никто не хочет. Поэтому автор тикета и открыл его с пожеланием сразу прикрыть лавочку.

Vlad
24.04.2018
09:09:47
Это к полноте особо отношения не имеет
Имеет прямейшее отношение. См. книгу Александреску. Адъ.

чекнул ваш пример
Может, завтра что-нибудь еще придумаю. Но очень вряд ли. Есть ощущение, что этого сделать нельзя. Пусть какой-нибудь другой энтузиаст нас удивит.

Alex
24.04.2018
09:42:54


Aleh
24.04.2018
09:45:15
Омг

Alex
24.04.2018
09:47:37


Google
Alex
24.04.2018
09:49:18






Игорь
24.04.2018
10:09:50
народ, а кто-то юзает тайпскрипт вместе с react-ом?

Admin
ERROR: S client not available

Artur
24.04.2018
10:11:27
Обсуждали это уже

Alex
24.04.2018
10:11:36
Artur
24.04.2018
10:13:29
где когда
Тут, найти не могу

Но в целом тс все по делу ругается

Просто при создании объекта тип свойства выводится как string

Alex
24.04.2018
10:14:22


не, мне нужно было сделать класс в который передаётся generic тип, и проверить попарное соотвествие двух полей

с помощью Conditional Types получилось разложить map тип на возможные комбинации парных значений

т.е. тип <T>{ [K in keyof T]: T[K} } раскладывается в { a: T[typeof b], b: T[typeof a] }

Google
andretshurotshka?❄️кде
24.04.2018
10:17:52
field2

а все

понял

Alex
24.04.2018
10:20:02


andretshurotshka?❄️кде
24.04.2018
10:20:06
тайплевел упорин

можно же просто сделать апи попроще)

Alex
24.04.2018
10:20:18
почему field3 получил допустимость всех типов

ну у менва вариант или передать 3 генерика, или один

три передавать не очень удобно

т.к. они могут определиться по аргументам отданым в конструктор

andretshurotshka?❄️кде
24.04.2018
10:22:05
это для реакта что-то?

Alex
24.04.2018
10:22:49
да

andretshurotshka?❄️кде
24.04.2018
10:23:19
ну примерно для чего

Alex
24.04.2018
10:23:53


andretshurotshka?❄️кде
24.04.2018
10:24:15
в реакте как юзается?)

Alex
24.04.2018
10:24:21
я вчера кидал свою реализацию типизированной формы, народ поржал, ибо для каждого поля отдельно создавался типизированный объект

типа field1, field2 и тд

andretshurotshka?❄️кде
24.04.2018
10:24:30
а да)

ну так жди генериков для jsx

Alex
24.04.2018
10:25:14
теперь, будет <Field name={"field"}> и значение value сразу предопределится

оказывается Conditional Types очень мощная штука для разложения типа на микс других

мало того, позволяет достать generic из типа

как расширить один тип другим?

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