Add is.propertyKey (#138)
Co-authored-by: Sindre Sorhus <sindresorhus@gmail.com> Co-authored-by: Giora Guttsait <giora111@gmail.com>
This commit is contained in:
parent
6f2b24d822
commit
d2f98e472d
3 changed files with 23 additions and 0 deletions
|
|
@ -428,6 +428,10 @@ Returns `true` if `value` is an even integer.
|
||||||
|
|
||||||
Returns `true` if `value` is an odd integer.
|
Returns `true` if `value` is an odd integer.
|
||||||
|
|
||||||
|
##### .propertyKey(value)
|
||||||
|
|
||||||
|
Returns `true` if `value` can be used as an object property key (either `string`, `number`, or `symbol`).
|
||||||
|
|
||||||
##### .any(predicate | predicate[], ...values)
|
##### .any(predicate | predicate[], ...values)
|
||||||
|
|
||||||
Using a single `predicate` argument, returns `true` if **any** of the input `values` returns true in the `predicate`:
|
Using a single `predicate` argument, returns `true` if **any** of the input `values` returns true in the `predicate`:
|
||||||
|
|
|
||||||
|
|
@ -360,6 +360,9 @@ is.nonEmptySet = <T = unknown>(value: unknown): value is Set<T> => is.set(value)
|
||||||
is.emptyMap = (value: unknown): value is Map<never, never> => is.map(value) && value.size === 0;
|
is.emptyMap = (value: unknown): value is Map<never, never> => is.map(value) && value.size === 0;
|
||||||
is.nonEmptyMap = <Key = unknown, Value = unknown>(value: unknown): value is Map<Key, Value> => is.map(value) && value.size > 0;
|
is.nonEmptyMap = <Key = unknown, Value = unknown>(value: unknown): value is Map<Key, Value> => is.map(value) && value.size > 0;
|
||||||
|
|
||||||
|
// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)
|
||||||
|
is.propertyKey = (value: unknown): value is PropertyKey => is.any([is.string, is.number, is.symbol], value);
|
||||||
|
|
||||||
export type Predicate = (value: unknown) => boolean;
|
export type Predicate = (value: unknown) => boolean;
|
||||||
|
|
||||||
type ArrayMethod = (fn: (value: unknown, index: number, array: unknown[]) => boolean, thisArg?: unknown) => boolean;
|
type ArrayMethod = (fn: (value: unknown, index: number, array: unknown[]) => boolean, thisArg?: unknown) => boolean;
|
||||||
|
|
@ -519,6 +522,7 @@ interface Assert {
|
||||||
nonEmptySet: <T = unknown>(value: unknown) => asserts value is Set<T>;
|
nonEmptySet: <T = unknown>(value: unknown) => asserts value is Set<T>;
|
||||||
emptyMap: (value: unknown) => asserts value is Map<never, never>;
|
emptyMap: (value: unknown) => asserts value is Map<never, never>;
|
||||||
nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown) => asserts value is Map<Key, Value>;
|
nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown) => asserts value is Map<Key, Value>;
|
||||||
|
propertyKey: (value: unknown) => asserts value is PropertyKey;
|
||||||
|
|
||||||
// Numbers.
|
// Numbers.
|
||||||
evenInteger: (value: number) => asserts value is number;
|
evenInteger: (value: number) => asserts value is number;
|
||||||
|
|
@ -616,6 +620,7 @@ export const assert: Assert = {
|
||||||
nonEmptySet: <T = unknown>(value: unknown): asserts value is Set<T> => assertType(is.nonEmptySet(value), AssertionTypeDescription.nonEmptySet, value),
|
nonEmptySet: <T = unknown>(value: unknown): asserts value is Set<T> => assertType(is.nonEmptySet(value), AssertionTypeDescription.nonEmptySet, value),
|
||||||
emptyMap: (value: unknown): asserts value is Map<never, never> => assertType(is.emptyMap(value), AssertionTypeDescription.emptyMap, value),
|
emptyMap: (value: unknown): asserts value is Map<never, never> => assertType(is.emptyMap(value), AssertionTypeDescription.emptyMap, value),
|
||||||
nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown): asserts value is Map<Key, Value> => assertType(is.nonEmptyMap(value), AssertionTypeDescription.nonEmptyMap, value),
|
nonEmptyMap: <Key = unknown, Value = unknown>(value: unknown): asserts value is Map<Key, Value> => assertType(is.nonEmptyMap(value), AssertionTypeDescription.nonEmptyMap, value),
|
||||||
|
propertyKey: (value: unknown): asserts value is number => assertType(is.propertyKey(value), 'PropertyKey', value),
|
||||||
|
|
||||||
// Numbers.
|
// Numbers.
|
||||||
evenInteger: (value: number): asserts value is number => assertType(is.evenInteger(value), AssertionTypeDescription.evenInteger, value),
|
evenInteger: (value: number): asserts value is number => assertType(is.evenInteger(value), AssertionTypeDescription.evenInteger, value),
|
||||||
|
|
|
||||||
14
test/test.ts
14
test/test.ts
|
|
@ -1490,6 +1490,20 @@ test('is.nonEmptyMap', t => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('is.propertyKey', t => {
|
||||||
|
t.true(is.propertyKey('key'));
|
||||||
|
t.true(is.propertyKey(42));
|
||||||
|
t.true(is.propertyKey(Symbol('')));
|
||||||
|
|
||||||
|
t.false(is.propertyKey(null));
|
||||||
|
t.false(is.propertyKey(undefined));
|
||||||
|
t.false(is.propertyKey(true));
|
||||||
|
t.false(is.propertyKey({}));
|
||||||
|
t.false(is.propertyKey([]));
|
||||||
|
t.false(is.propertyKey(new Map()));
|
||||||
|
t.false(is.propertyKey(new Set()));
|
||||||
|
});
|
||||||
|
|
||||||
test('is.any', t => {
|
test('is.any', t => {
|
||||||
t.true(is.any(is.string, {}, true, '🦄'));
|
t.true(is.any(is.string, {}, true, '🦄'));
|
||||||
t.true(is.any(is.object, false, {}, 'unicorns'));
|
t.true(is.any(is.object, false, {}, 'unicorns'));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue