strip-undefined-values
v1.0.2
Published
Remove undefined properties from an object. Fully typed. Zero dependencies.
Maintainers
Readme
strip-undefined-values
Remove undefined values from an object before sending to APIs, databases, or serializers.
Zero dependencies. Fully typed. Tiny. Shallow.
import { stripUndefined } from "strip-undefined-values"
stripUndefined({ name: "Tomas", age: undefined, active: true })
// => { name: "Tomas", active: true }Installation
npm install strip-undefined-valuespnpm add strip-undefined-valuesyarn add strip-undefined-valuesAPI
function stripUndefined<T extends Record<string, any>>(obj: T): StripUndefined<T>Removes own properties whose value is strictly undefined.
Returns a new object — does not mutate the input.
Nested objects are not traversed (shallow only).
| Value | Kept? |
| ----------- | ----- |
| null | Yes |
| false | Yes |
| 0 | Yes |
| "" | Yes |
| NaN | Yes |
| undefined | No|
TypeScript
The return type StripUndefined<T> automatically excludes keys whose type includes undefined:
type Input = { name: string; age: number | undefined; active: boolean }
type Output = StripUndefined<Input>
// ^? { name: string; active: boolean }This is intentionally conservative — the type is stricter than runtime so you can never accidentally access a possibly-undefined property on the result.
You can also use StripUndefined<T> standalone as a utility type:
import type { StripUndefined } from "strip-undefined-values"Common Use Cases
API payloads / PATCH requests
const body = stripUndefined({ name: "Tomas", email: "[email protected]", age: undefined })
// => { name: "Tomas", email: "[email protected]" }Query parameters
const params = stripUndefined({ page, search, sort })
const url = `/items?${new URLSearchParams(params)}`Prisma / database updates
await prisma.user.update({
where: { id },
data: stripUndefined({ name, email, bio })
})GraphQL variables
const { data } = await client.query({
query: GET_USERS,
variables: stripUndefined({ first, after, filter })
})Optional form fields
const formData = stripUndefined({
title: form.title,
description: form.description || undefined,
category: form.category || undefined,
})Comparison
| Approach | Typed? | Deps | Deep? | Mutates? |
| --- | --- | --- | --- | --- |
| strip-undefined-values | Yes | 0 | No | No |
| lodash.omitBy | Partial | 1 | No | No |
| Object.fromEntries(…filter…) | No | 0 | No | No |
| remove-undefined-objects | No | 1+ | Yes | No |
| Manual delete | No | 0 | No | Yes |
License
MIT
