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
- Pass a genuine `Set` instance (`new Set()`), not an array or other iterable
- If members are allowed, switch to `assert.set(value)` or check `is.emptySet(value)` as a boolean
- 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
- Verify the value is actually a Set (not an array or Map) before asserting emptiness
- Use set.clear() to empty a Set in place; reassigning to [] changes its type
- Prefer the boolean form is.emptySet(value) when a non-empty Set is a normal, expected case
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
- Expected value which is `empty map`, received value of type
- Expected value which is `empty object`, received value of ty
- Expected value which is `empty string`, received value of ty
- Expected value which is `empty string or whitespace`, receiv
- Expected value which is `EnumCase`, received value of type `
AI-assisted analysis of sindresorhus/is@7821031c66 (2026-07-31).
Data as JSON: /data/errors/f20afe1cae45520e.json.
Report an issue: GitHub ↗.