Pull to refresh

Comments 2

Несмотря на все старания по избавлению от XML в качестве формата данных, он все равно приходит к нам обратно...

Никуда он не приходит. Автор сравнивает несравнимое, а именно плоский json и многоуровневый html.

const template = (username: string, stories: Story[]) => ({
  text: `:wave: Привет ${username}, зацени наши последние статьи.`,
  attachments: stories.map(s => ({
    title,
    color: '#000000',
    title_link: s.link,
    author_name: s.author.name,
    author_icon: s.author.avatarURL,
    text: `Опубликовано в _${s.publishedAt}_.`
  })
})


Вот его пример, всё находится тут:

author_name: s.author.name,
author_icon: s.author.avatarURL,

и тут:

 title,
 color: '#000000',
 title_link: s.link,


Тут идёт разложение объекта title(text, link) на плоский объект. Тоже самое с author(name, icon).

Например, обратите внимание на непонятно к чему относящееся свойство color

А это просто глупо.

А тут мы видим, что изначально автор использовал не-плоские объекты:

interface Story { 
  title: string
  link: string
  publishedAt: Date
  author: { name: string, avatarURL: string }
}


И тут у него не возникало вопроса «а к чему относится title». В конечном итоге автор решал проблему с форматом данных в каком-то левом api и это проблемы тех, кто организовывал эти форматы.

В конечном итоге проблема решается явной типизацией/неймингом объектов. т.к. типизация в ts очень слаба, а в js нет тех же именованных аргументов — это проблема(для произвольных данных). В том же дарте мы можем написать так:

messate(title: "", attachments: stories.map(s => attachment(color: "", author: author(icon: "", name: ""), title: title(link: "", title: ""));


Тут также видно слабость типизации, ведь могли иметь не произвольные именованные аргументы, а произвольные типизированные аргументы(т.е. аргументы, которые выбираются исходя из типа, а не из имени), тогда бы мы просто написали:

messate(text_obj, stories.map(s => attachment(link_obj, author(name_obj, icon_obj), title(link_obj, title_text));


И после этого мы явно видим дыры в логике автора, когда у него внутри тега то name, то text, то title. Это не типизация, а дыра т.к. нельзя заранее сказать «что же там написано в chillds».

В ситуации указанной автором в примере выше даже не нужны «произвольные типизированные аргументы», ведь формат сообщений/вложений фиксирован. Спокойно используется последний случай.

Sign up to leave a comment.

Articles