Как условно создавать инлайн свойства в объекте

TLDR

let userName1 = 'koko'
const user1 = {
	id: 100500,
	...(userName1 && {userName: userName1})
}
console.log(user1) // {id: 100500, userName 'koko'}
let userName2
const user2 = {
	id: 100501,
	...(userName2 && {userName: userName2})
}
console.log(user2) // {id: 100500}

Стала передо мной недавно задача создавать объекты для ORM. В виду типизированности (код тайпскриптовый), ограничений ORM (null и undefined интерпретируются не как отсутствие свойства) и разнородности данных (иногда свойства есть иногда их нет), стало нужным объявлять объекты с переменным набором свойств. При том свойство не должно быть объявлено при некоторых условиях. Можно, конечно, создавать свойства со значениями null или undefined, а потом их удалять отдельным шагом. Или добавлять свойства уже после объявления объекта императивно через условия. Но оказывается есть более-менее вариант: спред объекта.

Вся конструкция работает потому что при спреде falsy значений (null, undefined), в целевой объект не попадает никаких свойств.

Вот источник который дал мне эти знания: javascript - Typescript - Conditional property of object - Stack Overflow.

да красиво.
я обычно писал …(userName1 ? {userName: userName1} : {})

1 лайк

Твой подход более очевиден читающему. За это он мне нравится больше чем то что я нашел.