sindresorhus/is · error · TypeError

Expected value which is `non-empty set`, received value of t

Error message

Expected value which is `non-empty set`, received value of type `${is(value)}`.

What it means

Thrown by `assertNonEmptySet()` (source/index.ts:1759) when the value is not a `Set` instance with `size > 0`. An empty Set, an array, or a WeakSet all fail; the TypeError message includes the detected type of what was actually received.

Source

Thrown at source/index.ts:1761

		throw new TypeError(message ?? typeErrorMessage('non-empty array', value));
	}
}

export function assertNonEmptyMap<Key = unknown, Value = unknown>(value: unknown, message?: string): asserts value is Map<Key, Value> {
	if (!isNonEmptyMap(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-empty map', value));
	}
}

export function assertNonEmptyObject<Key extends keyof any = string, Value = unknown>(value: unknown, message?: string): asserts value is Record<Key, Value> {
	if (!isNonEmptyObject(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-empty object', value));
	}
}

export function assertNonEmptySet<T = unknown>(value: unknown, message?: string): asserts value is Set<T> {
	if (!isNonEmptySet(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-empty set', value));
	}
}

export function assertNonEmptyString(value: unknown, message?: string): asserts value is string {
	if (!isNonEmptyString(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-empty string', value));
	}
}

export function assertNonEmptyStringAndNotWhitespace(value: unknown, message?: string): asserts value is string {
	if (!isNonEmptyStringAndNotWhitespace(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-empty string and not whitespace', value));
	}
}

export function assertNonNegativeInteger(value: unknown, message?: string): asserts value is number {
	if (!isNonNegativeInteger(value)) {
		throw new TypeError(message ?? typeErrorMessage('non-negative integer', value));

View on GitHub ↗ (pinned to 7821031c66)

Solutions

  1. Convert arrays with `new Set(array)` before asserting.
  2. If empty is a valid state, use `assert.set(value)` or `is.nonEmptySet(value)` conditionally.
  3. Trace why the Set is empty — check the code path that was supposed to `.add()` entries.

Example fix

// before
assert.nonEmptySet(allowedIds); // allowedIds is string[]
// after
const allowedIdSet = new Set(allowedIds);
assert.nonEmptySet(allowedIdSet);
Defensive patterns

Strategy: validation

Validate before calling

if (value instanceof Set && value.size > 0) {
  assert.nonEmptySet(value);
}

Type guard

function isNonEmptySet<T>(v: unknown): v is Set<T> {
  return v instanceof Set && v.size > 0;
}

Try / catch

try {
  assert.nonEmptySet(tags);
} catch (error) {
  if (error instanceof TypeError) {
    // set empty or not a Set — populate it or handle the empty case explicitly
  }
  throw error;
}

Prevention

When it happens

Trigger: Calling `assert.nonEmptySet(value)` with `new Set()` (empty), an array `[1, 2]`, a WeakSet, or a deserialized value (JSON has no Set representation).

Common situations: Passing an array where a Set is required; Sets emptied by a `.clear()` or never populated due to a logic branch being skipped; data round-tripped through JSON losing its Set-ness.

Related errors


AI-assisted analysis of sindresorhus/is@7821031c66 (2026-07-31). Data as JSON: /data/errors/3d9ee01bdbad3cd3.json. Report an issue: GitHub ↗.