constructor(recipeDetails: Details = { title: "", description: "", ingredients: [] }) {
for (let key in recipeDetails) {
(this[key as keyof Details] as Details[keyof Details]) = recipeDetails[key as keyof Details];
}
}
interface Details { title?: string, description?: string, ingredients?: RecipeIngredient[]}
Согласен! Давайте подставим значение 10:
function (10) { return 10; } вернёт 10.
Есть отдельно супер-примитивные UI компоненты, типа кнопок, таблиц, списков и так далее,
остальные компоненты с логикой и представлением вместе.
данные грузятся прямо в компоненте хуками, либо из стейта, либо из стора, либо из apollo, дальше с ними делается что надо и тут же рендерится что надо.
Декомпозиция не по принципу "или что-то рисует или что-то считает" как в упомянутом вами подходе, а по принципу выполняемой задачи. Если надо взять список объектов, посчитать например на них сумму, и красиво вывести, это все происходит в одном месте. Если какой-то из этих этапов становится достаточно сложным/объемным - рефакторится в что-то отдельное, либо в сервис, либо в функцию-хелпер, либо в другой компонент.
Из моего опыта так и удобнее намного и поддерживать приятнее.
Использую apollo+mobx+хуки, это все позволяет не сильно думать о нюансах работы с данными, они просто используются тогда когда нужны и там где нужны.
Каши нет. Как впрочем и идеала