🎧 Публичное собеседование #3: TypeScript, schema, state, MobX, fp, patterns

Подготовка к собеседованию на Frontend Developer

Транскрипция видео:

  • ну что расскажи о чем ты пишешь чем занимаешься ну занимаясь и преимущественно мобильной разработкой лари отметив мне не очень ну коммерческого опыта и меньше года работаю люблю typescript как то так то есть места как в основном это реакторе отметив the script tag сна может быть расскажи на typescript те какие парадигмы можно использовать и можно ли совмещать и чем отличается если ты несколько парадигм используем чем отличается функциональное программирование на typescript от других подходов на других языках возможно с чем-то

    00:00:01 - 00:01:38

  • можешь сравнить и и вот возможно какие-то паторны и шаблоны которые ты использовал на других языках в сраных скриптового ну я немного писал на скале например с калле тоже хорошая типизации единственно она ником павел тайма она прям встроенная весы к нарам time ago такая типизация конечно безусловно лучше но как бы работая с чего скриптовые к системы имеем только typescript ну и flow а баком poltime какие возможности хранить можно в принципе typescript очень гибкий и позволяет почти все что необходимо делать кроме

    00:00:58 - 00:02:38

  • вещей которые напрямую связаны с допустим дискриминации типов фронтами это можно например ну то есть есть такие интересные вещи ты скрипте например той гарды которые с одной стороны позволяют кастомной дискриминировать тип потому что это просто были на вы и но это просто предикат а с другой стороны они позволяют им ферич нужный тип ну что еще в пример вот про гарды расскажет гарды ну собственно декарт что они компилируются а ну компилируются они скорее всего в обычную ну честно я могу лишь предположить и не

    00:01:47 - 00:03:18

  • знаю точно предполагаю что не контролируется в обычную функцию которая за счет блин ну да да ну то есть практически а не компилируется в java script ну конечно да в обычный год на рифах практически просто мы скрываем всю эту сложность чтобы она не попадала в бизнес-логику и по сути нам все это нужно чтобы так чикин не попадал в бизнес-логику совершенно не сегодня ну да так но если мы не используем так гарды все пишем просто на интерфейсе и на типах ну тогда говорить ну вот да и во первых разница между типами интерфейсами во

    00:02:35 - 00:04:10

  • вторых чем это чревато типах интерфейса ну значит есть способы без той картов дискриминировать типы собственно есть такая вещь как дискриминатор это по сути добавление поля которая имеет какую-то какой-то константный тип и она однозначно определяет позволяет определить что это интерфейс такого то можно что это такой интерфейс и учитывая что это поле в объекте то мы можем опять же с его помощью дискриминировать типы вы антенна то есть по сути мы читаем эту информацию из property дескрипторов так

    00:03:22 - 00:04:53

  • что вы имеете виду под пропиской скриптовый сердце дескриптор get прапор то дескриптор у каждого свойства объекта есть дескриптор с кучей полей ты про эти поля нет я про поле более высокоуровневые пропали самого интерфейса то есть мы отдельное поле выделяем и называем его дискриминатор и в него можем писать ну то есть допустим если нам нужно дискриминировать поля о изменяет дискриминировать объекты юзер и это не стрит-арта мы можем собственным дискомет раз описывалось строчку юзер что мы туда можем записать метаданные

    00:04:11 - 00:05:36

  • которые позволяют делать все это вратами да да да кроме кроме property дескрипторов еще дополнительные метаданные которые более точно определяют ну да да и тег скрипт позволит таким образом то есть у нас интерфейсы в интерфейсах указаны вот эти дискриминаторы то мы сможем ну у нас taipan филин будет работать корректно если нам нужно порождать класс и динамические runtime и как мы это можем делать мы можем сделать собственно говоря фабрику классом это можно назвать миксы нам когда мы принимаем класс от него внутри либо x то

    00:04:54 - 00:06:25

  • это что-то не не принимаем класса просто создаем внутри функции класс фабрика ну да на вопрос класс тогда это будет ну не фабрика классов это будет обертка над классом ну вот как мы можем оказывать такие классы в typescript те которые мы создаём функции возвращаем наружу ну мы можем любой класс описывать как new apple интерфейс ну собственно вот если мы динамически создаем класс и а в смысле мы не знаем вы имеете ввиду что мы не знаем изначально что мы добавим этот нож какой каким мы создадим этот

    00:05:39 - 00:07:20

  • класс да в принципе он конечно может и приметить какие-то интерфейсы которые мы знаем заранее мы его большим кастить к этим интерфейсом но как минимум что конкретно за класс помимо этих также могут быть какие-то дополнительные поля или еще какая-нибудь обвес кого в этом пасе вот как вы с ним ваш обработать если мы его динамически создаем внутри функции возвращаем вот просто как результат функция возвращаем класс ну честно говоря мне в голову приходит только если мы знаем что вернется то передавать это дженерик параметрам

    00:06:32 - 00:08:02

  • ну да по сути мы можем как бы тут перейти к обобщенному программирование ну или вот к программированию на контракт практически общаться с этими порожденными классами как с instrumentation каких-то контрактов так теперь про пределы использования т как то по поводу [музыка] по поводу того как он работает с реализацией если мы реализуем передаем объекты из одной тачки программы в другую упасите они там потоки приплыли эти джейсон и каким образом нам восстановить объекты джейсона таким способом чтобы

    00:07:17 - 00:08:57

  • все метаданные у нас сохранились с одной стороны туда залезли данные определенных типов в том числе которые проходят checking горда мида а после сериализации это все разрушится ну да честно говоря на практике я стерилизации на треть скрипте не сталкивался ни нас такой родам и прям не если мы не будем какую-то структуру данных хитро типизированную и реализовать и передавать допустим если мы просто хотим какую-то структуру данных которая приходит виде джейсоном и ее здесь и реализуем и хотим как-то

    00:08:09 - 00:09:49

  • к типам чтобы сделать какой-то интерфейс подходит ну вариант иметь на принимающей стороне собственно говоря либо тайм карты либо какую-то более комплексную систему по типу какой-нибудь модуль reading даже не рединга ну в валидации и рединга моделей что-нибудь такое схемы над схемы можно назвать плюс к этому можно конечно иметь схемы и компилировать типы схем или наоборот компилировать схемы из типов можно при другие какие кстати есть инструменты которые вот могут одновременно порождать и скриптовые типы и схемы которыми можно

    00:09:02 - 00:10:29

  • там что-то во лидировать в ран тайны знаешь как я такими инструментами пользовался только своими написанными это схема себе написали из него компилируется этой пинге dts кит оперируются из базы и формы из него и я так понимаю эту библиотеку можно использовать принципе одно отдельно от всего и вообще есть джейсон схемы но джейсон схемы они работают для костанай валидации без скрипта как бы они ни к чему не привязано это просто универсальная библиотека java скриптов работающая можно встретить людей юзать по скорее

    00:09:54 - 00:11:23

  • всего к ты можешь погуглить джейсон схемам скорее всего есть как какие-то переходники для работы скрипта ложилась скорее всего есть какой-то то ли в дополнительной а как вы амитабхи в скиту link назвали 1 ну просто как раз на работе сейчас такую ищем что-то подобным не та схема хорошо я запишу себе джейсон five для описания схем и схем и практически они не в джейсон файлы файлах летать они лежат в cs файлах прямо в же с ну по сути в этом дсп или объект в котором вместо джейсона просто обычный java script объект

    00:10:37 - 00:12:07

  • я понял ну да украсивший выглядит немножечко его удобнее писать ну и и это как то в общем позволяет у jyj более больше возможностей имеет туда запихнуть разные типы которые не поддерживаются более куда придумать еще беднее мы придумали из ну и кстати туда можно и функцию заперт если нам нужно какой-то написать прямо вот какую-то функцию предикат человека какой-то вот мы его просто можем же мы скриптом написать прямо внутрь схемы по этому делу и к нему у нас тоже есть куча всякого туринга которые эти схемы

    00:11:33 - 00:13:10

  • это как отдельная библиотеками тайский там еще разные библиотеки которые позволяют и схем сразу компилировать контракты api-интерфейсы ска фолдить сетевые интерфейсы позволяет клиентскую валидацию делать серверную валидацию структуру базы компилировать всякого тулин гораздо что мы еще хотим этому делу дописать так это сейчас вот георг кстати это дописывает чтобы можно было типа писать тоже декларативно в схеме используются эти типы вот в этих мета схемах там описан система типов java скриптовая плюс наши

    00:12:32 - 00:14:16

  • хитрые типы cancer от этого всякое такое а вот чтобы написать свой тип он сейчас пишет ну по сути на java скрипте пишется мы хотим придумать еще декларативный формат тоже совместимый джейсон five чтоб можно было новый тип декларативно описать просто файлик с типом как-то переиспользовать то воля публиковать эти типы как отдельные модули но вообще интересная вещь это несколько нотации к этому модуле есть то может его даже стащу себе потому что мы как раз у подобную вещь какую-то ищем смотрим варианты есть не документации

    00:13:30 - 00:14:52

  • нифига нет это конечно не очень хорошо на самом деле моего пока что используешь как в тестовом варианте в своих проектах ну если что спасает что он не очень большой но он не очень красиво написано там все в отличие от все остальное бетар хитом немножечко запутанный код и вот сейчас как раз gear kawaii factory чтобы мы могли все это нормально и кстати не дописываем документацию потому что но пока он refractory даже не то что эти факторы а там скорее всего нужно будет существенно [музыка] функциональности контракты и поэтому там

    00:14:20 - 00:15:54

  • изменится внешний интерфейс мы перевыпустить сделаем новый пожарный релиз из окрестить со старым так что программа для ликвидации ну да ну как минимум идей оттуда можно посмотреть взять как это все сделано модуль просто не очень большой и там здесь чего посмотреть поэтому в принципе для своего проекта валидацию схемами лучше всего я думаю делать до джейсон схемах а вот обвязку кстати который из этих джейсон схем что-нибудь там компилирует я думаю что можно найти если такого нет это несложно создать

    00:15:08 - 00:16:45

  • какой-то лис копировал тайминги или вообще там с интерфейсами можно просто даже задачу сложнее то есть это тебе нужно от парсить скриптовый файл и потом из него сделать схемы это гораздо сложнее потому что синтаксис typescript а он сложнее чем конечно ну конечно ну то есть придется писать свой парк ты не можешь использовать готовые уже ну да или ты затащишь затащишь вместе с собой весь typescript в проект это не очень а вот именно из-за вас trip to take скрипт генерировать это гораздо проще потому

    00:15:56 - 00:17:24

  • что у нас в любом случае давай скрипт весь наличии есть всегда вратами он есть да и поэтому мы можем просто самым java script использовать парсить за 1 3 поэтому так как у нас все это вв-8 мы можем заставить v8 тогда будет парсить там схемы генерировать уже распада не можем просто как строку что попало скриптов придется всего его чтобы получать стд cry 2 нам нужно будет очень много проект прицеплять не понял так давай теперь может быть ты расскажешь что-нибудь про чтобы вода проектирования которые ты

    00:16:50 - 00:18:31

  • используешь и в разработке что тебе из них нравится что не нравится ну значит из таких более специфических вещей которые я использую и то я использую паттерн бизнес ложек компонент который пришел из из angular ее дарта но используя его в реакции в react нити из более как бы общепринятых паттернов я использую например обзор мир каждый день абсолютно [музыка] ну по необходимости допустимо томас observer я беру и и забыться вот собственно наш наша архитектура она построена вокруг паттерна без лучше

    00:17:46 - 00:19:21

  • компонент учитывая что у react и нету инструментов для того чтобы его как бы написать и свойственно именно react а в отличие от допустим там angular на то мы его строим на именно она обычно [музыка] так ну может быть может быть что нибудь promo mix расскажет что это ну а что конкретно вот кроме кроме observer вы используете его по основному назначению по основному назначению в смысле стоит starring ну конечно , то что так а в чем его фишка заключается почему вот почему его мы приносим в проекты

    00:18:32 - 00:20:11

  • ну во-первых мы bags позволяет делать разные независимые друг от друга с торы во-вторых мне у довольно удобная система ну в принципе с ним удобно работать потому что он сам трек от все дары фрaнс тенге ну как то так может быть можно сравнить его с другими системами управления стали там ну скажем так я ну его обычно сравнивают с редакциям с редакциям я не работал ни когда я работал исключительно с индексом но с тем с теми способами которыми я еще стоит менеджер это например через ряд контекст и и ну это не очень хорошо

    00:19:28 - 00:21:03

  • подходит для серьезных проектов и поэтому поэтому bags но что во-первых контекст и они не не оптимизирована под хранение часто меняющихся данных ну и в принципе у них мало вокруг них всякого тулин да ок ок может быть здесь еще подход с таким управлением стой там когда у нас стоит никогда не изменяется а всегда мы создаем новый все объекты которые уже были они практически остаются и бьют apple за free жены это значит вы все время порождает новый стоит а старый просто отбирает вы ссылки кстати именно так я обычно пишу если я

    00:20:21 - 00:22:03

  • вас правильно понял то есть я обычно из ну допустим нас из коллекции каких-то элементов там не знаю коллекция юзера пускай будет если то нам сервера пришли новые то или там мы сделали какой-то апдейт юзера то я их ну из старой коллекции порождаю новую и и записываю уже в star новую коллекцию а почему то не бачишь старую почему это выводить проблем ну скажем так случае с индексом вообще предполагается что ты плачешь ну я так не делаю потому я все стараюсь писать отдельно к возможности что это как бы вообще сама идея в том

    00:21:14 - 00:22:36

  • что там все так почему ты принял сторону его табельного подходят это поздно так меньше вылазит всяких непредвиденных состояний которые не валютных состояний допустим и так далее да это рейсов то есть не консистентных данных так удобно когда мы создаем новые чистенькие объекту в нем чем допустим я сам с патчем какие-то старые объекты там биг си нами просто [музыка] обращением к рефлексии объекта но это короче ненадежный подход так ну да ну что если то есть если мы делаем это им ему табельное если мы предполагаем

    00:21:54 - 00:23:46

  • что мы получили на вход валидный стоит и наша логика внутри нашего обновление верна то как бы предполагается что мы и выдали обратно тоже валит не стоит это то что у нас объекты и мутабельные то еще позволяет нам более чистый код писать то есть если у нас нету его что-то где-то пропатчить это ведет все-таки к тому чтобы функции были были чисты как только как только ему табель настя значит это сразу же позволяет вести потому что бы были понятно дело что в проекте не могут быть все функции чистыми а вот где они не могут быть

    00:22:54 - 00:24:21

  • чистой мы макси максимально все очистили от эффектов что мы не можем очистить ну например скиллы и запросы но если мы говорим про клиентскую часть это stella запрос если про сервер ну ты и 3 сетевые запросы запросы к базе из мы можем их обложить монадами но как бы всё равно в какой то момент мы эту монаду как бы исполним и исполнится side effect каком-то месте просто ну как бы контролируемо по сути эта обёртка это штука которая экранирует весь остальной код опция дефектов ну да на

    00:23:40 - 00:25:04