Comments 2
Несмотря на все старания по избавлению от XML в качестве формата данных, он все равно приходит к нам обратно...
Никуда он не приходит. Автор сравнивает несравнимое, а именно плоский json и многоуровневый html.
Вот его пример, всё находится тут:
и тут:
Тут идёт разложение объекта title(text, link) на плоский объект. Тоже самое с author(name, icon).
А это просто глупо.
А тут мы видим, что изначально автор использовал не-плоские объекты:
И тут у него не возникало вопроса «а к чему относится title». В конечном итоге автор решал проблему с форматом данных в каком-то левом api и это проблемы тех, кто организовывал эти форматы.
В конечном итоге проблема решается явной типизацией/неймингом объектов. т.к. типизация в ts очень слаба, а в js нет тех же именованных аргументов — это проблема(для произвольных данных). В том же дарте мы можем написать так:
Тут также видно слабость типизации, ведь могли иметь не произвольные именованные аргументы, а произвольные типизированные аргументы(т.е. аргументы, которые выбираются исходя из типа, а не из имени), тогда бы мы просто написали:
И после этого мы явно видим дыры в логике автора, когда у него внутри тега то name, то text, то title. Это не типизация, а дыра т.к. нельзя заранее сказать «что же там написано в chillds».
В ситуации указанной автором в примере выше даже не нужны «произвольные типизированные аргументы», ведь формат сообщений/вложений фиксирован. Спокойно используется последний случай.
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.
Типизированный DSL в TypeScript из JSX