Fix index-as-message bug in assertArray
As `assertArray` previously called the assertion function in a `forEach(assertion)`, the index was passed as the custom message. This commit fixes this bug by passing down the `message` argument to the assertion function. A `@ts-expect-error` comment was added to due to "Assertions require every name in the call target to be declared with an explicit type annotation.".
This commit is contained in:
parent
ab85d9bca9
commit
d77be18d42
2 changed files with 10 additions and 3 deletions
|
|
@ -1143,14 +1143,17 @@ export function assertAny(predicate: Predicate | Predicate[], ...values: unknown
|
|||
}
|
||||
}
|
||||
|
||||
export function assertArray<T = unknown>(value: unknown, assertion?: (element: unknown) => asserts element is T, message?: string): asserts value is T[] {
|
||||
export function assertArray<T = unknown>(value: unknown, assertion?: (element: unknown, message?: string) => asserts element is T, message?: string): asserts value is T[] {
|
||||
if (!isArray(value)) {
|
||||
throw new TypeError(message ?? typeErrorMessage('Array', value));
|
||||
}
|
||||
|
||||
if (assertion) {
|
||||
// eslint-disable-next-line unicorn/no-array-for-each, unicorn/no-array-callback-reference
|
||||
value.forEach(assertion);
|
||||
// eslint-disable-next-line unicorn/no-array-for-each
|
||||
value.forEach(v => {
|
||||
// @ts-expect-error: "Assertions require every name in the call target to be declared with an explicit type annotation."
|
||||
assertion(v, message);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -773,6 +773,10 @@ test('is.array', t => {
|
|||
x[0]?.toFixed(0);
|
||||
}
|
||||
});
|
||||
|
||||
t.throws(() => {
|
||||
assert.array([1, '2'], assert.number, 'Expected numbers');
|
||||
}, {message: /Expected numbers/});
|
||||
});
|
||||
|
||||
test('is.function', t => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue