Fix type narrowing for non empty array

This commit is contained in:
Eugene 2023-07-14 15:07:48 +01:00
parent 9265e9072d
commit 6d4f32287f
2 changed files with 29 additions and 10 deletions

View file

@ -384,7 +384,7 @@ is.oddInteger = isAbsoluteMod2(1);
is.emptyArray = (value: unknown): value is never[] => is.array(value) && value.length === 0; is.emptyArray = (value: unknown): value is never[] => is.array(value) && value.length === 0;
is.nonEmptyArray = (value: unknown): value is [unknown, ...unknown[]] => is.array(value) && value.length > 0; is.nonEmptyArray = <T = unknown>(value: T | T[]): value is [T, ...T[]] => is.array(value) && value.length > 0;
is.emptyString = (value: unknown): value is '' => is.string(value) && value.length === 0; is.emptyString = (value: unknown): value is '' => is.string(value) && value.length === 0;

View file

@ -1448,16 +1448,35 @@ test('is.nonEmptyArray', t => {
assert.nonEmptyArray(new Array()); // eslint-disable-line @typescript-eslint/no-array-constructor assert.nonEmptyArray(new Array()); // eslint-disable-line @typescript-eslint/no-array-constructor
}); });
// https://github.com/sindresorhus/is/issues/174 {
// { const strings = ['🦄', 'unicorn'];
// const strings = ['foo', 'bar'] const function_ = (value: string) => value;
// const function_ = (value: string) => value;
// if (is.nonEmptyArray(strings)) { if (is.nonEmptyArray(strings)) {
// const value = strings[0] const value = strings[0];
// function_(value); function_(value);
// } }
// } }
{
const mixed = ['🦄', 'unicorn', 1, 2];
const function_ = (value: string | number) => value;
if (is.nonEmptyArray(mixed)) {
const value = mixed[0];
function_(value);
}
}
{
const arrays = [['🦄'], ['unicorn']];
const function_ = (value: string[]) => value;
if (is.nonEmptyArray(arrays)) {
const value = arrays[0];
function_(value);
}
}
}); });
test('is.emptyString', t => { test('is.emptyString', t => {