@typescript_ru

Страница 577 из 669
Vitaliy
13.04.2018
13:00:30
https://goo.gl/1XEiry
так то можно что-угодно в него протолкнуть function thing(): any { return { } }

Ivan
13.04.2018
13:01:15
ну не any

ну что-нибудь

ну чтобы smartcast не врубился

Google
Ivan
13.04.2018
13:01:34
а то он скотина преобразует x просто в D

в общем там any не нужно

Mark
13.04.2018
13:03:25
я руками прописываю эти поля

ну просто заполняю

ни как такое низя :(

Vitaliy
13.04.2018
13:10:04
а чем решение выше не подходит?

https://i.gyazo.com/35390e7e2616a7c243c40c3104d3c94d.png

можно чуть-чуть задублировать https://i.gyazo.com/aaf922ae3e424cd66986c29216b32214.png

Mark
13.04.2018
14:20:21
Спасибо :)

я просто думал одним интерфейсом обойтись

Vlad
13.04.2018
14:58:20


Да можно вообще без интерфейсов обойтись.

Google
Vlad
13.04.2018
15:13:38
Хотя не получится. Вот решение, которое работает в точности как надо. Оно чуть посложнее. http://www.typescriptlang.org/play/#src=function%20thing()%20%7B%0D%0A%20%20%20%20return%20%7B%20d%3A%201%20%7D%0D%0A%7D%0D%0A%0D%0Ainterface%20A%20%7B%20a%3A%20number%20%7D%0D%0Ainterface%20B%20%7B%20b%3A%20number%20%7D%0D%0Ainterface%20C%20%7B%20c%3A%20number%20%7D%0D%0Ainterface%20D%20%7B%20d%3A%20number%20%7D%0D%0A%0D%0Atype%20M%20%3D%20(A%20%26%20Partial%3CB%20%26%20C%20%26%20D%3E)%0D%0A%20%20%20%20%7C%20(B%20%26%20Partial%3CA%20%26%20C%20%26%20D%3E)%0D%0A%20%20%20%20%7C%20(C%20%26%20Partial%3CA%20%26%20B%20%26%20D%3E)%0D%0A%20%20%20%20%7C%20(D%20%26%20Partial%3CA%20%26%20B%20%26%20C%3E)%3B%0D%0A%20%20%20%20%0D%0Alet%20x%20%3D%20thing()%3B%0D%0A%0D%0Alet%20y%3A%20M%3B%0D%0Ay%20%3D%20x%3B%0D%0A%0D%0Aconsole.log(y.d)%3B



Mark
13.04.2018
16:44:44
а можно пример)?

andretshurotshka?❄️кде
13.04.2018
16:44:48
а

могут быть все четыре поля?

да вроде это то что надо

Mark
13.04.2018
16:49:19
могут быть все четыре поля?
нет только одно из них

andretshurotshka?❄️кде
13.04.2018
16:49:59
а это не работает?

Vlad
13.04.2018
19:40:13
А хотите решение повеселее?



Лучше стало, правда? :)

Mark
13.04.2018
19:42:56
Лучше стало, правда? :)
епсель мопсель... а чёт по проще)?

тут в объяснения происходящего сам черт ногу сломить...

Vlad
13.04.2018
19:43:46
Попроще так попроще. Теперь знак ? писать не надо ;)



Работает оно так. 1) "K extends keyof A" - К подмножество ключей типа А, где А - параметер Has.

2) Partial<A> - это просто, делает все свойства типа A опциональными. 3) { [key in K]: A[K] } - определяет новый тип, в котором будет ровно такие элементы, которые заданы параметром K, то есть один. 4) A[K] извлекает из типа А тип его мембера K.

Google
Vlad
13.04.2018
19:47:18
5) Пересекаем типы при помощи &, и неопциональный параметр перетирает опциональный.

Ключевые слова - "mapped types".

Без этого - только руками четыре интерфейса написать. Но не знаю, ИМХО это совсем не проще, когда в TS такие замечательные штуки есть.

Короче, вот это заклинание Has заботает независимо от наших знаний о нем, так что можно его один раз скопипастить и расслабиться. :)

И вот еще как можно: type X = Has<'a'|'b', A> | Has<'b'|'c', A>; В X либо определены а и b, либо b и c.

а это не работает?
Нет, первый мой вариант не работал. Ломается если задать два мембера сразу, т.е. например { a : "1", b : "1" }

Oleg
13.04.2018
21:29:15
А встроенный Pick не то же самое делает, что и Has?

Vlad
13.04.2018
21:29:37
Хм.

Oleg
13.04.2018
21:30:10
type Pick<T, K extends keyof T> = { [P in K]: T[P]; };

Vlad
13.04.2018
21:30:20
Да, вроде ровно то же самое.

Morsik
13.04.2018
21:30:23
другое

has делает все | undefined, кроме нужного поля

а, стоп

Vlad
13.04.2018
21:31:49
type Has<K extends keyof A, A> = Partial<A> & Pick<A, K>

Вот так они относятся.

С Pick оно попроще как-то выглядит, действительно.

Ну и тогда параметры разверуть. type Has<A, K extends keyof A> = Partial<A> & Pick<A, K> Вот, так хорошо.

Oleg
13.04.2018
21:37:18
В 2.8 кажется завезли, пачку удобных дженериков

Дмитрий
14.04.2018
04:25:49
Я не понимаю почему в тс в таком восторге от спорных эзотерических конструкций, больше напоминающих черновики по матану

Google
Дмитрий
14.04.2018
04:28:47
Напишите уже наконец майнкрафт на тс выражениях, к чему все эти полумеры

Gleb
14.04.2018
04:29:08
Да херня , потом все равно сидишь в рекомпозе генерики подтыкаешь типами чтобы хоть что то вывести

Дмитрий
14.04.2018
04:29:24
Ну вот да

Gleb
14.04.2018
04:30:32
у меня большой сравнительно проект и я брал его из за количества только либ, в итоге я оч устал подтыкать генерики прям это уже заколебывает и все равно нет нет да не выведутся типы в конце композиции

Vlad
14.04.2018
04:30:32
Это вполне естественно. Трудно быть в восторге от вещей, смысла и предназначения которых не понимаешь, правда ведь?

Gleb
14.04.2018
04:31:30
Еще раз - смыл в количестве тайпингов для либ

Дмитрий
14.04.2018
04:38:07
Вы уже два дня решаете проблему которой просто нет

Vlad
14.04.2018
04:38:15
Мне в свою очередь не очень понятно, что в mapped types такого непонятного и сложного. И как в принципе можно предъявлять претензии к наличию фич, предназначенных в первую очередь для авторов фреймворков и библиотек. Не нравится - не пользуйся.

Дмитрий
14.04.2018
04:38:51
Братан, забудь слово "не понятно", поверь все всё прекрасно понимают

Vlad
14.04.2018
04:39:51
Братан - ты ты кто, Иисус Христос, чтобы тебе верить? :)

Дмитрий
14.04.2018
04:40:03
Да

Какой вопрос такой и ответ, сорян

Я предъявляю претензии к глобальному направлению движения проекта в таких моментах, потому что это потом сказывается на всех

Подобные порывы ПОСЧИТАТЬ объекты выглядят как надпись говном на стене извиняюсь за прямоту

Vlad
14.04.2018
04:41:26
Не понимаю претензии, и извини - совсем не вижу, как это может отрицательно сказаться «на всех».

Дмитрий
14.04.2018
04:41:46
вроде бы и понятно что автор имел ввиду, но читать всё равно не приятно

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

А то что тут два дня пытаются юзать объекты не по назначению к сожалению никто не скажет

Vlad
14.04.2018
04:43:23
Ну, этого бы я не опасался. У большинства заметные проблемы с пониманием, как эти конструкции в принципе работают. :)

И нужны они, ещё раз, в первую очередь авторам фреймворков и библиотек.

Google
Дмитрий
14.04.2018
04:44:33
В первую же очередь они им не нужны

Vlad
14.04.2018
04:45:03
Ну вот тут уже дай мне, как такому автору, самому решать.

Дмитрий
14.04.2018
04:45:23
Чем меньше подобного обмазывания объектами в библиотеках тем проще и надежнее их типизация

То за всех говоришь то вдруг за себя и обратно

Еще раз - это паршивая практика

Очень

andretshurotshka?❄️кде
14.04.2018
04:46:45
и я просто тайпинги пишу

Дмитрий
14.04.2018
04:47:10
Забиться в угол и рыдать, естественно

Vlad
14.04.2018
04:47:26
Да нет, это ты какой-то демагог. Вообще непонятно, зачем ты вот это все говоришь :)

Дмитрий
14.04.2018
04:47:37
Прецеденты не являются оправданием для существования же

Vlad
14.04.2018
04:48:21
«Вот это плохая практика» - какая блин из практик там плохая? Зависимые типы? Да неужели? :)

Дмитрий
14.04.2018
04:48:36
ЗАВИСИМЫЕ ТИПЫ

АААА

прекрати плиз

Нет, ты серьезно так думаешь?

Vlad
14.04.2018
04:49:34
С тобой там вообще все в порядке? :)

Дмитрий
14.04.2018
04:49:40
Ты реально решил что забацал сейчас зависимые типы, в тайпскрипте?

Vlad
14.04.2018
04:49:53
Ой, сколько пафоса :)

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