
Vlad
02.10.2017
21:42:40
всё на этом первая часть закончела. хотелка достигнута. на беке есть тоже поддержка типов и типы шарятся между беком и фронтом. 1 раз написаны - красота.
вы хотите писать без TS - пишите. или скорее всего ваш бек вообще не на JS и тогда и говорить не о чем конечно же.
и тут меня занесло в ОРМ, т.к. я подумал “стой было бы круто…"
и вот курю в сторону typeorm и соображаю можно было бы….

Google

Vlad
02.10.2017
21:43:42
но это уже совсем другая история

Yury
02.10.2017
21:43:43
А почему у вас типы на фронте и беке совпадают?

Ivan
02.10.2017
21:44:06
@vladsharikov я тебя предупреждал что тут начнётся %)

Vlad
02.10.2017
21:44:51
Безусловно они не полностью совпадают. Частично совпадение есть. Например у меня есть объект который возвращает бек: {items: Tag[]}. У меня есть Тег. И он блин совпадает.
На беке я фильтрую массив
Сортирую массив
Мне помогут подсказки по св-вам
Например у меня есть interface TagsRequestFilter {query?: string}
И он тоже одинаковый и там и там
Я конкретно о той части бекенда которая крайняя и которая взаимодействует с фронтом
Что там внутри у бека - отедльный разговор.
Там свои классы и своя кухня и т.п. и т.д.
Я лишь о том небольшом слое что обрабатывает запросы и возвращает ответы.

Google

Vlad
02.10.2017
21:47:28
вот эта часть частично местами общая.

Yury
02.10.2017
21:47:38
Слой отображения(контроллеры)?

Vlad
02.10.2017
21:47:59
Да, наверное для API это будет слой отображения.
https://github.com/sharikovvladislav/ng2-diary-book-backend/blob/master/functions/diary/get-my-diary-entries.js#L7
Кстати этот же файл хорошо пояснит чем мне неугоден nosql и почему хочется норм БД реляционную
если бы была такая я бы решил дело простым селектом.
и вот тут дальше мне в голову пришла мысль что о! орм! было же круто тогда в школе? можно и сейчас попробовать!

Yury
02.10.2017
21:50:10
Ну можно наверное и там и там использовать этот интерфейс, проблем нет. Но я бы не стал, тк интерфейсы на мой взгляд должны располагаться в том месте где они нужны, например при DIP.

Vlad
02.10.2017
21:50:23
и вот я говорю с вами сейчас =)
можно использовать. и у меня вся логика в общем-то в этом слое сосредоточена (ни в коем случае не претендую на правильность и тп). поэтому неплохо тут не косячить так глупо.
вот сейчас разработка фронта - рай, разработка бека - ад. если бы я не редеплоил проект так много вчера я бы ушёл спать в 2, а не в 4 =)
Не думайте о моем фронте-беке как о чем-то мудрёном и сложном. Всё проще некуда. Фронт Angular. Бек firebase. Прослойка между фронтом и беком: REST API. Бек: express обрабатывает эти запросы, работает с firebase ref и что-то оттуда возвращает (или добавляет или whatever). Всё просто просто. Очень маленький проект.

Yury
02.10.2017
21:56:00
Если клиент и сервер разные приложения. То к примеру если вам нужно поменять для сервера этот
объект-интерфейс, то получается что он измениться и для фронта, хотя для фронта он не должен меняться.

Vlad
02.10.2017
21:56:11
Как же так?
Смотрите, я поменяю Tag.
Добавлю туда еще обязательный description.
Почему на фронте я не должен о нём знать?

Yury
02.10.2017
21:56:47
Тогда у вас не ДВА приложения, а ОДНО.
У вас нет границы получается.

Vlad
02.10.2017
21:57:05
Мы просто добавляем (или удаляем, изменяем) какое-то поле.

Google

Vlad
02.10.2017
21:57:09
Но погодите. Пусть будет два.
Вот отлично
Вы на сервере (бекендщики злые ага) удалили поле name из Tag

Yury
02.10.2017
21:57:40
Поэтому вы и делаете что то похожее на метеор

Vlad
02.10.2017
21:57:58
у вас есть X API ф-ий которые я (светлый воин фронтенда) вызываю
и тут внезапно вы такие не отдаете то на что у меня завязки много где есть.
1 момент, покажу

Yury
02.10.2017
21:59:30
Суть в том что этих завязок и не должно быть.
Фронт не зависит от моделей на бекенде
фронт зависит от api
это граница

Vlad
02.10.2017
21:59:56
У меня появились такие ошибки:
ERROR in /Users/svlad/dev/ng2-diary-book/src/app/diary/containers/entry-create-container.ts (29,7): Type '{ date: Date; message: string; tags: undefined[]; }' is not assignable to type 'DiaryEntry'.
Object literal may only specify known properties, and 'date' does not exist in type 'DiaryEntry'.
ERROR in /Users/svlad/dev/ng2-diary-book/src/app/diary/services/diary-entry.ts (41,23): Property 'createDate' does not exist on type '{ $key?: string; id?: number; message: string; }'.
Как не должно быть зависимостей.
Окей поясните мне как правильно.
Да на самом деле я от вас получаю просто JSON

Yury
02.10.2017
22:00:31
Нет правильно или неправильно

Vlad
02.10.2017
22:00:35
Так вот у вас нет границы, а страдают конечные пользователи

Yury
02.10.2017
22:00:39
я просто говорю что у вас получается одно приложение

Vlad
02.10.2017
22:00:57
Потому что у них потом будет написано : нельзя прмиенять метод фильтр на undefined (tagIds какой-нибудь)

Yury
02.10.2017
22:00:57
и это похоже на метеор

Google

Vlad
02.10.2017
22:01:02
потому что бек его не прислал
а и кстати потом конечные пользователи винить будут во всем фронтенд, а бекенд будет белый и пушистый)

Yury
02.10.2017
22:01:58
при раздельный приложениях, бек работает с моделями, он не должен отдавать эти модели

Vlad
02.10.2017
22:02:07
повелевать фронтендщикам “так ребят вы тут разберитесь в логах, ошибка то на морде, а мы пока новые фичи попалим”
Да раздельное раздельное) Но как бы оно одно. Оно должно в целом работать.
Вот даже простейшая хотя бы вещь. ТайпСкрипт мне помогает не накосячить на фронте или на беке. Почему бы не использовать это?

Yury
02.10.2017
22:03:01
Тогда вы делаете одно цельное приложение front+back, вы пытаетесь сделать такую же магию как метеор
но я такое не юзаю, так что дальше помочь не могу)

Vlad
02.10.2017
22:03:14
Так и хорошо. В чём проблема?
Ага. Вы же тот самый злой бекендщик и “у вас ошибок нет” :troll: ?

Yury
02.10.2017
22:04:00
Нет никаких проблем, я вас в самом начале и посоветовал просто посмотреть на метеор)))))

Vlad
02.10.2017
22:04:22
Посмотрю тоже, спасибо.
На самом деле пока мы говорили прикинул прототип общей модели. Огонь же. Минимально необходимое - подстветка - работает и правильно работает. Мой мир стал чуточку лучше ?. Но typeorm вопрос будет открыт =) Но после курения метеора. Ща давайте спать.

Yury
02.10.2017
22:08:23
Мне еще работать)

Vlad
02.10.2017
22:09:09
Надеюсь вы просто из Владивостока и у вас 8 утра ?

Yury
02.10.2017
22:09:43
Nope - Moskva never спать

Aleksey
02.10.2017
22:52:40
я имею ввиду там тоже все и фронт и бек

Kenya-West
03.10.2017
03:13:58
https://medium.com/web-on-the-edge/thinking-in-typescript-cb7f8a6434c0

Denis
03.10.2017
07:19:20
https://medium.com/@paul.souche/one-word-about-typescript-control-flow-and-union-types-discrimination-fc2cb1095d93?source=linkShare-60d353fea4d-1507015134

Google

andretshurotshka?❄️кде
03.10.2017
07:32:00
>inference in typescript
Статья ниочем

Artur
03.10.2017
09:17:38
Вижу что в @types есть указание версии typescript для которой типы написаны. А как то можно эту инфу использовать при установке типов?
обновление до ts 2.5 это боль :(

Aleh
03.10.2017
10:07:46
фигачить селекты как-то не оч?
орм это инструмент для решения другой задачи на другой границе. У вас проблема на границе клиента и бекенда, а орм - решение проблемы на границе бекенда и хранилища(рсубд)

Vlad
03.10.2017
10:08:18
@mkusher я описывал 2 проблемы
Одна из проблем на границе
И ее решить без ОРМ можно без проблем
А ОРМ - да, решение проблемы между беком и БД - всё так.

Aleh
03.10.2017
10:09:30

Artur
03.10.2017
11:54:53
Теперь если создаёшь jsx элемент через функцию-фабрику, лишние пропы являются ошибкой. А если через jsx - нет.
Как то это... неконсистентно.

andretshurotshka?❄️кде
03.10.2017
12:05:11
Это в типах?

Artur
03.10.2017
12:09:39
точнее даже не так: если использовать спред-оператор, то лишние пропсы которые он добавляют считаются лишними на object literals, но не считаются таковыми в jsx

Vlad
03.10.2017
13:03:12
Товарищи. Есть некий nodejs модуль. Хочется добавить TypeScript.
Сейчас в модуле написано:
module.exports = function (x) {}
Как сделать export в TypeScript так, чтобы это было преобразовано в module.exports?

andretshurotshka?❄️кде
03.10.2017
13:04:27
export = function () {}
не уверен что работает где-то кроме деклараций
я бы ес модули заюзал

Олег
03.10.2017
13:05:57
работает

Vlad
03.10.2017
14:21:30