Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2021 September 03

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
и пример не на 10 строк
источник

BB

Bogdan Bida in NodeUA - JavaScript and Node.js in Ukraine
А что за задача? Если кратко выйдет
источник

D

Dmitry 🤨 ç in NodeUA - JavaScript and Node.js in Ukraine
Честно говоря за всю мою практику не встречал подобного даже близко, но и похвастаться огромным запасом опыта не могу
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
задача простая - имея тип Т получить все его возможные ключи
источник

BB

Bogdan Bida in NodeUA - JavaScript and Node.js in Ukraine
Ну да, у тс есть такие приколы но кажется такое и далеко не для каждого проекта с тсом
источник

МЗ

Михаил Золотарёв... in NodeUA - JavaScript and Node.js in Ukraine
Посмотри тайпинги популярных либ
Там такого много насколько я помню
источник

D

Dmitry 🤨 ç in NodeUA - JavaScript and Node.js in Ukraine
На проектах обычно ребята оставляли либо полное говно с any(что плохая практика) либо описывали всё нормально. Но конкретно чтобы такие костыли делать...
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
это не костыль. У вас есть тип, вы хотите строго типизировать другой тип который может содержать только ключи что есть в вашем типе
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Заметьте как вы сразу заклеймили "костылем"
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
Так вот в чем проблема:

новичок пишет type Keys<T> = keyof T потому что ведь это же очевидно
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
и это работает.... до тех пор пока однажды тип Т не становится юнионом
источник

BB

Bogdan Bida in NodeUA - JavaScript and Node.js in Ukraine
Стоп, а чем изначальный тип не подходит?
Как бы такое решалось бы в том же .net или любом другом языке со строгой типизацией?
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
задача подучить множество ключей объекта
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
не сам объект
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
так вот - и тогда оказывается что keyof - ведет себя контрвариантно, и поэтому при наличии юниона извлекает ключи которые есть только во всех частях юниона
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
гипноз фанатиков мешает
источник

BB

Bogdan Bida in NodeUA - JavaScript and Node.js in Ukraine
Ааа, теперь разъяснилось
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
чтобы решить эту проблему мы делаем distributed conditional type пользуясь тем, что если у нас в conditional type лежит дженерик с юнионом - тайпскрипт применит операцию к каждой части юниона
источник

IK

Illya Klymov in NodeUA - JavaScript and Node.js in Ukraine
поэтому и появляется T extends any - которое всегда истинно - чтобы сделать distributed type
источник

D

Dmitry 🤨 ç in NodeUA - JavaScript and Node.js in Ukraine
Может тогда стоит бороться с наивными предубеждениями которые стоят возле технологии а не с самой технологией? :)
Высказывания мол "скоро умрет как coffescript" звучит как попытка убедить что оно уже мертво а не прогнозирование
источник