@typescript_ru

Страница 424 из 669
Дмитрий
01.12.2017
09:53:32
Какую проблему ты решаешь гетом

Andrey
01.12.2017
09:53:49
Вот у меня желания такую хрень совершенно нет парсить.

Пиздец
Это от балды.

Google
Дмитрий
01.12.2017
09:54:05
Это пиздец

Andrey
01.12.2017
09:54:34
Ну, у меня была одна ситуация, когда эта хрень понадобилась.

А так да, это пиздец.

Дмитрий
01.12.2017
09:56:30
Защита от типизации кода

Алексей
01.12.2017
09:57:06
Защита от типизации кода
Как будто что-то плохое

И вообще функции-дженерики вам на что?

Дмитрий
01.12.2017
09:58:08
Как будто что-то плохое
Ну при использовании тайпскрипта возможно даже и разницы не будет ;)

Это не случай для них

Алексей
01.12.2017
10:07:14
Это не случай для них
да нет, как раз для них

Дмитрий
01.12.2017
10:07:58
Как написать any со сложными щщами и не подать виду

Karl
01.12.2017
10:18:09
Google
Golodnyi
01.12.2017
10:19:07
а для get только undef считается пустым значением? Конструкция в целом неудачная

хотя обычно в проектах столько говнокода, что это мелочи

Karl
01.12.2017
10:21:00
я вот ща в легаси копаюсь tslint фикшу

Алексей
01.12.2017
10:23:37
Как написать any со сложными щщами и не подать виду
Так это же фича TS - динамическая типизация там где она нужна.

Дмитрий
01.12.2017
10:24:45
"Я не потерял тип, я динамически типизировал"

Aleh
01.12.2017
10:24:49
и баг - динамическая типизация там, где она не нужна(

Алексей
01.12.2017
10:26:01
"Я не потерял тип, я динамически типизировал"
Без проверок типов в рантайме для таких задач не обойтись

Дмитрий
01.12.2017
10:26:52
Полсе того как тс опять динамически типизировал втихую — разумеется

Karl
01.12.2017
10:29:16
const title = gameMetaData.title || defaultTitle; короч сделал так, имхо бест вариант, но чет так и не понял как тайпскрипт тут побороть

Max
01.12.2017
10:29:27
можно ли как-то опционально сделать метод, который бы работал this.state.get<MyModel>(State.MyModel); так и this.state.get(State.MyModel);



?

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

Алексей
01.12.2017
10:30:51
Полсе того как тс опять динамически типизировал втихую — разумеется
Нет. TS тут не причем. Либо теряем тип, либо в рантайме проверяем. Других вариантов нет. Это я все про задачу с get(object, 'a.b.c')

Дмитрий
01.12.2017
10:33:43
Нет. TS тут не причем. Либо теряем тип, либо в рантайме проверяем. Других вариантов нет. Это я все про задачу с get(object, 'a.b.c')
Ты понимаешь что твоё утверждение не несёт никакого смысла, нонсенс? У тебя тут нет дженерика от слова совсем, ты просто херишь тип а потом заново делаешь вывод из any

Дмитрий
01.12.2017
10:38:18
И это не дженерик

Алексей
01.12.2017
10:39:14
А дженерик - это фактически просто чуть более красивый any

Google
Aleh
01.12.2017
10:39:31


Алексей
01.12.2017
10:39:33
Опять же без проверок в рантайме

Morsik
01.12.2017
10:39:39
Дженерик это не any

Всмысле он дает больше чем просто красоту

Алексей
01.12.2017
10:42:00
Всмысле он дает больше чем просто красоту
В данной задаче только красоту

Morsik
01.12.2017
10:42:34
Ну такими темпами дойдемдо того что твйпскипт дает только красоту

Дмитрий
01.12.2017
10:43:09
Дженерики для красоты ето сильно

Aleh
01.12.2017
10:43:28
я тоже считаю, что дженерики это красиво

как jsx

Дмитрий
01.12.2017
10:43:52
Такая своего рода гирлянда, чтобы открывал код и обретал праздничное, нарядное настроение

— Зачем вы используете дженерики? — Ну во-первых, это красиво...

Karl
01.12.2017
10:47:30
кто нить может скинуть где почитать как дженерики работают?

Karl
01.12.2017
10:47:49
не в плане доки, а как они внутри устроены

Алексей
01.12.2017
10:50:09
Я вообще о том, что никаких дженериков в JS коде нет, да и ts типов тоже. И проверок типов тоже нет. И если дженерик get параметризирован number, то не факт, что в результате он действительно число вернет.

Aleh
01.12.2017
10:51:07
ну если вы специально не обманываете тайпчекер(кастуете any к произвольному типу) где-то, то факт

Алексей
01.12.2017
10:52:29
ну если вы специально не обманываете тайпчекер(кастуете any к произвольному типу) где-то, то факт
В задаче про get(object, 'a.b.c') не обманывать тайпчекер можно только через any.

Aleh
01.12.2017
10:52:40
в случае тс тайпчекер не снимает необходимости валидировать данные внешнего мира

В задаче про get(object, 'a.b.c') не обманывать тайпчекер можно только через any.
ну тут легко можно немного изменить формат и тайпчекать

Алексей
01.12.2017
10:53:05
ну тут легко можно немного изменить формат и тайпчекать
Или проверять типы в рантайме, чтобы действительно не обманывать тайпчекер

Aleh
01.12.2017
10:53:20
например g(g(object, ‘a’), ‘b’) или потом g(object, “a”, “b”)

Google
Aleh
01.12.2017
10:54:06
проверять типы есть смысл только для данных из внешнего мира

Алексей
01.12.2017
10:54:11
например g(g(object, ‘a’), ‘b’) или потом g(object, “a”, “b”)
а как будет выглядеть сигнатура такой функции в TS?

Алексей
01.12.2017
10:57:10
Полнейшее непонимание сути и предназначения дженериков
И какая же у них суть и предназначение?

Aleh
01.12.2017
10:57:22
а как будет выглядеть сигнатура такой функции в TS?
https://www.typescriptlang.org/play/index.html#src=declare%20function%20get%3CO%2C%20P%20extends%20keyof%20O%3E(o%3A%20O%2C%20p%3A%20P)%3A%20O%5BP%5D%0Adeclare%20function%20get%3CO%2C%20P1%20extends%20keyof%20O%2C%20P2%20extends%20keyof%20O%5BP1%5D%3E(o%3A%20O%2C%20p1%3A%20P1%2C%20p2%3A%20P2)%3A%20O%5BP1%5D%5BP2%5D%0A%0Aconst%20a%20%3D%20%7B%0A%20%20%20%20a%3A%20%7B%0A%20%20%20%20%20%20%20%20b%3A%205%0A%20%20%20%20%7D%0A%7D%0Aconst%20b%20%3D%20get(a%2C%20%22a%22%2C%20%22b%22)

Aleh
01.12.2017
10:59:51
ну очевидно да

Дмитрий
01.12.2017
11:00:11
В тайпскрипте — да

Aleh
01.12.2017
11:00:32
ну очевидно да
если конечно вы не проверите строку на соответствие ключам объектов

Admin
ERROR: S client not available

Алексей
01.12.2017
11:00:38
ну очевидно да
то есть возвращаемся обратно к рантайм проверкам

Aleh
01.12.2017
11:00:48
т.е. если не докажите, что они являются keyof

Karl
01.12.2017
11:01:16
я правильно понимаю, что const tabs: Array<React.ReactElement<ITabProps>> = []; тоже самое что const tabs: React.ReactElement<ITabProps>[] = []; ?

Aleh
01.12.2017
11:01:29
то есть возвращаемся обратно к рантайм проверкам
мне сложно представить необходимость формирования такой строки в рантайме

Дмитрий
01.12.2017
11:02:21
Душа требует гирлянд

Алексей
01.12.2017
11:03:05
мне сложно представить необходимость формирования такой строки в рантайме
это не значит, что такой необходимости не возникнет

Aleh
01.12.2017
11:04:02
есть подозрение, что это опять какие-то данные из внешнего мира, которые да, надо валидировать и это никак не влияет на то, что все типизируется нормально)

Алексей
01.12.2017
11:07:47
есть подозрение, что это опять какие-то данные из внешнего мира, которые да, надо валидировать и это никак не влияет на то, что все типизируется нормально)
Ну провалидировали, тип объекта известен и даже строка во время компиляции известна. Но вот функцию вида get(object, 'a.b.c') по прежнему нельзя безопасно типизировать без рантайм проверок, самостоятельной проверки типов или изменения сигнатуры функции. Так как не получится во время компиляции заставить TS распарсить строку.

Aleh
01.12.2017
11:08:11
так, а что вы провалидировали?

Дмитрий
01.12.2017
11:08:38
Это кстати не означает что это в принципе невозможно статически типизировать

Google
Aleh
01.12.2017
11:09:15
тип объекта и тип строки, что он соответствует какому-то пути в объекте? Тогда как я показал выше, в тс можно описать тип операции, в системах типов получше можно описать это еще лучше

Алексей
01.12.2017
11:10:36
тип объекта и тип строки, что он соответствует какому-то пути в объекте? Тогда как я показал выше, в тс можно описать тип операции, в системах типов получше можно описать это еще лучше
Допустим мы провалидировали тип объекта, строку и всё всё у нас валидно и путь есть. Но только для корректной типизации всё равно надо будет менять сигнатуру функции.

Алексей
01.12.2017
11:12:17
про сигнатуру не понял
get(object, 'a.b.c') придётся заменить на get(object, 'a', 'b', 'c')

Aleh
01.12.2017
11:12:44
ну да

Алексей
01.12.2017
11:12:50
вот только это не всегда возможно, так как get скорее всего вообще в чужой либе лежит

Aleh
01.12.2017
11:13:02
ну еще eval особо не типизируешь

Алексей
01.12.2017
11:13:22
и JSON.parse

Aleh
01.12.2017
11:13:40
да, это все работа с внешним миром, нужно валидировать

или зависимые типы искать

Дмитрий
01.12.2017
11:14:10
Лёл

http://kcsongor.github.io/purescript-safe-printf/

Алексей
01.12.2017
11:14:20
да, это все работа с внешним миром, нужно валидировать
да даже не с внешним миром, вот в чём прикол

Дмитрий
01.12.2017
11:14:39
http://kcsongor.github.io/purescript-safe-printf/
Система типов нормального человека

Aleh
01.12.2017
11:14:44
да даже не с внешним миром, вот в чём прикол
можно мне кейс, где рандомная строка не из внешнего мира пойдет в json.parse?

Алексей
01.12.2017
11:15:22
Дмитрий
01.12.2017
11:15:29
:t format @"Wurble %d %d %s" Int -> Int -> String -> String

Алексей
01.12.2017
11:15:34
хотя это всё редкие вещи на саомм деле

Aleh
01.12.2017
11:16:25
в json.parse скорее всего нет, а вот в get - запросто
ну а get можно типизировать, если вы путь не билдите в рантайме, а если в рантайме, то покажите мне почему это так без взаимодействия с внешним миром у вас какие-то хитрые пути в объекте)

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