From fe344fd7eb6b0cdbc9557e8382881cc5856f36ec Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Sat, 9 Dec 2017 00:01:39 -0500 Subject: [PATCH] Add is.directInstanceOf() --- readme.md | 14 ++++++++++++++ source/index.ts | 2 ++ source/tests/test.ts | 11 +++++++++++ 3 files changed, 27 insertions(+) diff --git a/readme.md b/readme.md index a0d135d..95dc7c2 100644 --- a/readme.md +++ b/readme.md @@ -136,6 +136,20 @@ is.boundFunction(function () {}); #### Miscellaneous +##### .directInstanceOf(value, klass) + +Returns `true` if value is a direct instance of a class of type `klass`. + +```js +class ErrorSubclass extends Error {}; + +is.directInstanceOf(new Error(), Error); +//=> true + +is.directInstanceOf(new ErrorSubclass(), Error); +//=> false +``` + ##### .truthy(value) Returns `true` for all values that evaluate to true in a boolean context: diff --git a/source/index.ts b/source/index.ts index 196a49c..97bd0cb 100644 --- a/source/index.ts +++ b/source/index.ts @@ -162,6 +162,8 @@ namespace is { // tslint:disable-line:no-namespace export const arrayBuffer = isObjectOfType(TypeName.ArrayBuffer); export const sharedArrayBuffer = isObjectOfType(TypeName.SharedArrayBuffer); + export const directInstanceOf = (instance: any, klass: any) => object(instance) && object(klass) && Object.getPrototypeOf(instance) === klass.prototype; + export const truthy = (value: any) => Boolean(value); export const falsy = (value: any) => !value; diff --git a/source/tests/test.ts b/source/tests/test.ts index 340defd..130594b 100644 --- a/source/tests/test.ts +++ b/source/tests/test.ts @@ -507,6 +507,17 @@ test('is.dataView', t => { testType(t, 'arrayBuffer'); }); +test('is.directInstanceOf', t => { + const error = new Error(); + const errorSubclass = new ErrorSubclassFixture(); + + t.true(m.directInstanceOf(error, Error)); + t.true(m.directInstanceOf(errorSubclass, ErrorSubclassFixture)); + + t.false(m.directInstanceOf(error, ErrorSubclassFixture)); + t.false(m.directInstanceOf(errorSubclass, Error)); +}); + test('is.truthy', t => { t.true(m.truthy('unicorn')); t.true(m.truthy('🦄'));