sindresorhus/is · error · TypeError

Expected value which is `empty set`, received value of type

Error message

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

What it means

Thrown by `assertEmptySet` (source/index.ts:1572) when the value is not a Set instance with size 0. The assertion narrows to `Set<never>` on success and throws a TypeError containing the actual type from `is(value)` on failure.

Source

Thrown at source/index.ts:1574

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

export function assertEmptyMap(value: unknown, message?: string): asserts value is Map<never, never> {
	if (!isEmptyMap(value)) {
		throw new TypeError(message ?? typeErrorMessage('empty map', value));
	}
}

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

export function assertEmptySet(value: unknown, message?: string): asserts value is Set<never> {
	if (!isEmptySet(value)) {
		throw new TypeError(message ?? typeErrorMessage('empty set', value));
	}
}

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

export function assertEmptyStringOrWhitespace(value: unknown, message?: string): asserts value is '' | Whitespace {
	if (!isEmptyStringOrWhitespace(value)) {
		throw new TypeError(message ?? typeErrorMessage('empty string or whitespace', value));
	}
}

export function assertEnumCase<T = unknown>(value: unknown, targetEnum: T, message?: string): asserts value is T[keyof T] {
	if (!isEnumCase(value, targetEnum)) {
		throw new TypeError(message ?? typeErrorMessage('EnumCase', value));

View on GitHub ↗ (pinned to 7821031c66)

Solutions

  1. Pass a genuine `Set` instance (`new Set()`), not an array or other iterable
  2. If members are allowed, switch to `assert.set(value)` or check `is.emptySet(value)` as a boolean
  3. Call `set.clear()` before asserting when the invariant is that processing has emptied it

Example fix

// before
assert.emptySet([]); // array, throws
// after
assert.emptySet(new Set());
Defensive patterns

Strategy: type-guard

Validate before calling

if (is.set(value) && value.size === 0) {
  assert.emptySet(value);
}

Type guard

function isEmptySet(value: unknown): value is Set<unknown> {
  return value instanceof Set && value.size === 0;
}

Try / catch

try {
  assert.emptySet(value);
} catch (error) {
  if (error instanceof TypeError) {
    // value is not a Set, or the Set has members
  } else throw error;
}

Prevention

When it happens

Trigger: Calling `assert.emptySet(value)` with a non-Set (array, object, Map) or with a Set containing one or more elements.

Common situations: Test teardown verifying a subscriber/listener Set was drained; passing an array `[]` where a `Set` is required; a Set retaining members because deduplicated cleanup logic missed items or `clear()` wasn't called.

Related errors


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