Удаление из объекта свойств со значениями null и undefined

Отфильтруйте null/undefined при копировании собственных перечисляемых свойств. Тип результата безопасно сделать частичным: nullable-поля могут отсутствовать, а сохранённые значения исключают null и undefined.

Короткий ответ

Что ответить на собеседовании

Отфильтруйте null/undefined при копировании собственных перечисляемых свойств. Тип результата безопасно сделать частичным: nullable-поля могут отсутствовать, а сохранённые значения исключают null и undefined.

Подробный разбор

Ответ с пояснениями

Условие

Создайте утилитарную функцию, которая принимает объект и возвращает новый объект, в котором отсутствуют свойства, значения которых равны null или undefined.

  • В объекте могут находиться свойства любого типа.
  • Необходимо оформить типы как для входных, так и для выходных данных.
Пример:
// вход
{
  a: 'test',
  b: 23,
  c: null,
  d: undefined
}

// выход
{
  a: 'test',
  b: 23
}

Ответ

Отфильтруйте null/undefined при копировании собственных перечисляемых свойств. Тип результата безопасно сделать частичным: nullable-поля могут отсутствовать, а сохранённые значения исключают null и undefined.

type Clean<T> = Partial<{ [K in keyof T]: NonNullable<T[K]> }>;
function removeNullish<T extends object>(input: T): Clean<T> {
  const result: Record<PropertyKey, unknown> = {};
  for (const key of Reflect.ownKeys(input)) {
    if (!Object.prototype.propertyIsEnumerable.call(input, key)) continue;
    const value = input[key as keyof T];
    if (value !== null && value !== undefined) {
      Object.defineProperty(result, key, { value, enumerable: true, writable: true, configurable: true });
    }
  }
  return result as Clean<T>;
}

Число 0, false и пустая строка сохраняются. Symbol-ключи поддерживаются; прототип и дескрипторы исходника не копируются. Очистка поверхностная, вложенные объекты остаются по ссылке. Partial намеренно консервативен: он не обещает наличие полей, исчезновение которых зависит от runtime-значения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее