From efb08e4a136df446ee15f68d0051bdeeed273d57 Mon Sep 17 00:00:00 2001 From: PopGoesTheWza Date: Tue, 7 Sep 2021 10:54:53 +0200 Subject: [PATCH] feat: `is.propertyKey` --- source/index.ts | 5 +++++ test/test.ts | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/source/index.ts b/source/index.ts index d9fb699..ef2ac3f 100644 --- a/source/index.ts +++ b/source/index.ts @@ -150,6 +150,8 @@ is.string = isOfType('string'); const isNumberType = isOfType('number'); is.number = (value: unknown): value is number => isNumberType(value) && !is.nan(value); +is.propertyKey = (value: unknown): value is PropertyKey => is.any([is.string, is.number, is.symbol], value); + is.bigint = isOfType('bigint'); // eslint-disable-next-line @typescript-eslint/ban-types @@ -448,6 +450,7 @@ interface Assert { undefined: (value: unknown) => asserts value is undefined; string: (value: unknown) => asserts value is string; number: (value: unknown) => asserts value is number; + propertyKey: (value: unknown) => asserts value is PropertyKey; bigint: (value: unknown) => asserts value is bigint; // eslint-disable-next-line @typescript-eslint/ban-types function_: (value: unknown) => asserts value is Function; @@ -538,6 +541,8 @@ export const assert: Assert = { undefined: (value: unknown): asserts value is undefined => assertType(is.undefined(value), 'undefined', value), string: (value: unknown): asserts value is string => assertType(is.string(value), 'string', value), number: (value: unknown): asserts value is number => assertType(is.number(value), 'number', value), + // ? Is an AssertionTypeDescription.propertyKey entry necessary? + propertyKey: (value: unknown): asserts value is number => assertType(is.propertyKey(value), 'PropertyKey', value), bigint: (value: unknown): asserts value is bigint => assertType(is.bigint(value), 'bigint', value), // eslint-disable-next-line @typescript-eslint/ban-types function_: (value: unknown): asserts value is Function => assertType(is.function_(value), 'Function', value), diff --git a/test/test.ts b/test/test.ts index 30c1a86..69b2b41 100644 --- a/test/test.ts +++ b/test/test.ts @@ -613,6 +613,13 @@ test('is.number', t => { testType(t, 'number', ['integer', 'safeInteger', 'infinite']); }); +test('is.propertyKey', t => { + // ??? Unsure what is the correct syntax to `testType` multiple types. Also are the exclusion relevant? + testType(t, 'string', ['emptyString', 'numericString']); + testType(t, 'number', ['nan', 'integer', 'safeInteger', 'infinite']); + testType(t, 'symbol'); +}); + test('is.bigint', t => { testType(t, 'bigint'); });