Repository: char0n/ramda-adjunct
Pull request #1444 (2020-05-13 05:17:03)

chore(deps-dev): bump typescript from 3.8.3 to 3.9.2
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 3.8.3 to 3.9.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/Microsoft/TypeScript/releases">typescript's releases</a>.</em></p>
<blockquote>
<h2>TypeScript 3.9.2</h2>
<p>For release notes, check out the <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-3-9/">release announcement</a>.</p>
<p>For the complete list of fixed issues, check out the</p>
<ul>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.0%22+is%3Aclosed+">fixed issues query for Typescript v3.9.0 (Beta)</a>.</li>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.1%22+is%3Aclosed+">fixed issues query for Typescript v3.9.1 (RC)</a>.</li>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.2%22+is%3Aclosed+">fixed issues query for Typescript v3.9.2 (Final)</a>.</li>
</ul>
<p>Downloads are available on:</p>
<ul>
<li><a href="https://www.npmjs.com/package/typescript">npm</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.TypeScript-39">Visual Studio 2017/2019</a> (<a href="https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017">Select new version in project options</a>)</li>
<li><a href="https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild">NuGet package</a></li>
</ul>
<h2>TypeScript 3.9 RC</h2>
<p>For release notes, check out the <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-3-9-rc/">release announcement</a>.</p>
<p>For the complete list of fixed issues, check out the</p>
<ul>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.0%22+is%3Aclosed+">fixed issues query for Typescript v3.9.0 Beta</a>.</li>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.1%22+is%3Aclosed+">fixed issues query for Typescript v3.9.1 RC</a>.</li>
</ul>
<p>Downloads are available on:</p>
<ul>
<li><a href="https://www.npmjs.com/package/typescript">npm</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.TypeScript-39rc">Visual Studio 2017/2019</a> (<a href="https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017">Select new version in project options</a>)</li>
<li><a href="https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild">NuGet package</a></li>
</ul>
<h2>TypeScript 3.9 Beta</h2>
<p>For release notes, check out the <a href="https://devblogs.microsoft.com/typescript/announcing-typescript-3-9-beta/">release announcement</a>.</p>
<p>For the complete list of fixed issues, check out the</p>
<ul>
<li><a href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=is%3Aissue+milestone%3A%22TypeScript+3.9.0%22+is%3Aclosed+">fixed issues query for Typescript v3.9-beta</a>.</li>
</ul>
<p>Downloads are available on:</p>
<ul>
<li><a href="https://www.npmjs.com/package/typescript">npm</a></li>
<li><a href="https://marketplace.visualstudio.com/items?itemName=TypeScriptTeam.TypeScript-39beta">Visual Studio 2017/2019</a> (<a href="https://github.com/Microsoft/TypeScript/wiki/Updating-TypeScript-in-Visual-Studio-2017">Select new version in project options</a>)</li>
<li><a href="https://www.nuget.org/packages/Microsoft.TypeScript.MSBuild">NuGet package</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/microsoft/TypeScript/commit/551f0dd9a1b57ecd527a665b0af7fc98cd107af6"><code>551f0dd</code></a> Bump version to 3.9.2 and LKG</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/8bd8a88ab57eb607af759646c967a50b13952794"><code>8bd8a88</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38434">#38434</a> from typescript-bot/pick/38270/release-3.9</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/7eb4cdedb980aa598c73dbf65ef2426368eb8153"><code>7eb4cde</code></a> Cherry-pick PR <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38270">#38270</a> into release-3.9</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/a073560ebe408105a8f35cef3cb08a1ab5857f31"><code>a073560</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38372">#38372</a> from typescript-bot/pick/38368/release-3.9</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/623f78e20f0e3332aacfa73b7af195d32cc825e2"><code>623f78e</code></a> Cherry-pick PR <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38368">#38368</a> into release-3.9</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/659677f6d0eaf3d2899267278e90bccfde5878ee"><code>659677f</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38364">#38364</a> from typescript-bot/pick/38351/release-3.9</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/9edf9ecc4b82178de49e78dfaf513fc9f0f0ec7d"><code>9edf9ec</code></a> Cherry-pick PR <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38395">#38395</a> into release-3.9 (<a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38402">#38402</a>)</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/ef028bcd08340abee95a35ddf96c356a750fd11a"><code>ef028bc</code></a> Cherry-pick PR <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38377">#38377</a> into release-3.9 (<a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38386">#38386</a>)</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/d906a471dd37db803a809ed25490830c4cd00202"><code>d906a47</code></a> Cherry-pick PR <a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38398">#38398</a> into release-3.9 (<a href="https://github-redirect.dependabot.com/Microsoft/TypeScript/issues/38400">#38400</a>)</li>
<li><a href="https://github.com/microsoft/TypeScript/commit/8f79cd42f45f5c852747093f4e2a38ed8dc72337"><code>8f79cd4</code></a> ESLint suppressions because ain't nobody got time for this.</li>
<li>Additional commits viewable in <a href="https://github.com/Microsoft/TypeScript/compare/v3.8.3...v3.9.2">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=typescript&package-manager=npm_and_yarn&previous-version=3.8.3&new-version=3.9.2)](https://dependabot.com/compatibility-score/?dependency-name=typescript&package-manager=npm_and_yarn&previous-version=3.8.3&new-version=3.9.2)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in the `.dependabot/config.yml` file in this repo:
- Update frequency
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)



</details>


Patch:
diff --git a/package-lock.json b/package-lock.json
index 238de19a8a..0f3430f8fd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16146,9 +16146,9 @@
       }
     },
     "typescript": {
-      "version": "3.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz",
-      "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==",
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz",
+      "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==",
       "dev": true
     },
     "typify-parser": {
diff --git a/package.json b/package.json
index 8aed763a54..8eca2ccdae 100644
--- a/package.json
+++ b/package.json
@@ -186,7 +186,7 @@
     "terser-webpack-plugin": "3.0.1",
     "testem": "3.1.0",
     "tslint": "=6.1.2",
-    "typescript": "=3.8.3",
+    "typescript": "=3.9.2",
     "webpack": "4.43.0",
     "webpack-cli": "3.3.11"
   },
diff --git a/src/index.js b/src/index.js
index 9303ce9240..bee118f573 100644
--- a/src/index.js
+++ b/src/index.js
@@ -55,6 +55,7 @@ export { default as isNotNilOrEmpty } from './isNotNilOrEmpty';
 export { default as isNonPositive } from './isNonPositive';
 export { default as isNonNegative } from './isNonNegative';
 export { default as isMap } from './isMap';
+export { default as isNotMap } from './isNotMap';
 export { default as isNaN } from './isNaN';
 export { default as isNotNaN } from './isNotNaN';
 export { default as isFinite } from './isFinite';
@@ -79,6 +80,7 @@ export { default as isFalsy } from './isFalsy';
 export { default as isRegExp } from './isRegExp';
 export { default as isNotRegExp } from './isNotRegExp';
 export { default as isSet } from './isSet';
+export { default as isNotSet } from './isNotSet';
 export { default as isSparseArray } from './isSparseArray';
 export { default as isSymbol } from './isSymbol';
 export { default as isSafeInteger } from './isSafeInteger';
@@ -152,6 +154,7 @@ export { default as notAllUnique } from './notAllUnique';
 export { default as sortByProps } from './sortByProps';
 export { default as skipTake } from './skipTake';
 // Object
+export { default as invokeArgs } from './invokeArgs';
 export { default as paths } from './paths';
 export { default as renameKeys } from './renameKeys';
 export { default as renameKeysWith } from './renameKeysWith';
diff --git a/src/invokeArgs.js b/src/invokeArgs.js
new file mode 100644
index 0000000000..666d56fe8a
--- /dev/null
+++ b/src/invokeArgs.js
@@ -0,0 +1,36 @@
+import { curryN, path, apply, init, bind } from 'ramda';
+
+import isNotFunction from './isNotFunction';
+import isEmptyArray from './isEmptyArray';
+
+/**
+ * Invokes the method at path of object with given arguments.
+ *
+ * @func invokeArgs
+ * @memberOf RA
+ * @since {@link https://char0n.github.io/ramda-adjunct/2.27.0|v2.27.0}
+ * @category Object
+ * @sig Array -> Array -> Object -> *
+ * @param {Array.<string|number>} path The path of the method to invoke
+ * @param {Array} args The arguments to invoke the method with
+ * @param {Object} obj The object to query
+ * @return {*}
+ * @example
+ *
+ * RA.invokeArgs(['abs'], [-1], Math); //=> 1
+ * RA.invokeArgs(['path', 'to', 'non-existent', 'method'], [-1], Math); //=> undefined
+ */
+
+const invokeArgs = curryN(3, (mpath, args, obj) => {
+  const method = path(mpath, obj);
+  const context = path(init(mpath), obj);
+
+  if (isNotFunction(method)) return undefined;
+  if (isEmptyArray(mpath)) return undefined;
+
+  const boundMethod = bind(method, context);
+
+  return apply(boundMethod, args);
+});
+
+export default invokeArgs;
diff --git a/src/isNotMap.js b/src/isNotMap.js
new file mode 100644
index 0000000000..9ecf3c7232
--- /dev/null
+++ b/src/isNotMap.js
@@ -0,0 +1,26 @@
+import { complement } from 'ramda';
+
+import isMap from './isMap';
+
+/**
+ * Checks if value is complement of `Map` object.
+ *
+ * @func isNotMap
+ * @memberOf RA
+ * @category Type
+ * @sig * -> Boolean
+ * @param {*} val The value to test
+ * @return {boolean}
+ * @see {@link RA.isMap|isMap}
+ * @example
+ *
+ * RA.isNotMap(new Map()); //=> false
+ * RA.isNotMap(new Map([[1, 2], [2, 1]])); //=> false
+ * RA.isNotMap(new Set()); //=> true
+ * RA.isNotMap({}); //=> true
+ * RA.isNotMap(12); //=> true
+ */
+
+const isNotMap = complement(isMap);
+
+export default isNotMap;
diff --git a/src/isNotSet.js b/src/isNotSet.js
new file mode 100644
index 0000000000..c752e66da4
--- /dev/null
+++ b/src/isNotSet.js
@@ -0,0 +1,25 @@
+import { complement } from 'ramda';
+
+import isSet from './isSet';
+
+/**
+ * Checks if value is complement of `Set` object.
+ *
+ * @func isNotSet
+ * @memberOf RA
+ * @category Type
+ * @sig * -> Boolean
+ * @param {*} val The value to test
+ * @return {boolean}
+ * @see {@link RA.isSet|isSet}
+ * @example
+ *
+ * RA.isNotSet(new Map()); //=> true
+ * RA.isNotSet(new Set()); //=> false
+ * RA.isNotSet(new Set([1,2]); //=> false
+ * RA.isNotSet(new Object()); //=> true
+ */
+
+const isNotSet = complement(isSet);
+
+export default isNotSet;
diff --git a/types/index.d.ts b/types/index.d.ts
index 434fa7c2bb..47f96ab671 100644
--- a/types/index.d.ts
+++ b/types/index.d.ts
@@ -250,6 +250,11 @@ declare namespace RamdaAdjunct {
          */
         isMap(val: any): val is Map<any, any>;
 
+        /**
+         * Checks if value is complement of `Map` object.
+         */
+        isNotMap(val: any): boolean;
+
         /**
          * Checks whether the passed value is `NaN` and its type is `Number`.
          * It is a more robust version of the original, global isNaN().
@@ -392,6 +397,11 @@ declare namespace RamdaAdjunct {
          */
         isSet(val: any): val is Set<any>;
 
+        /**
+         * Checks if value is complement of `Set` object.
+         */
+        isNotSet(val: any): boolean;
+
         /**
          * Checks if value is complement of `RegExp` object.
          */
@@ -1375,6 +1385,13 @@ declare namespace RamdaAdjunct {
          * Determine if input value is an indexed data type.
          */
         isIndexed(val: any): val is string | any[];
+
+        /**
+         * Invokes the method at path of object with given arguments.
+         */
+        invokeArgs(pathToMethod: string[], args: Array<string | number>, obj: object): any;
+        invokeArgs(pathToMethod: string[], args: Array<string | number>): (obj: object) => any;
+        invokeArgs(pathToMethod: string[]): (args: Array<string | number>, obj: object) => any;
     }
 }
 


Test patch:
diff --git a/test/invokeArgs.js b/test/invokeArgs.js
new file mode 100644
index 0000000000..f643d5720b
--- /dev/null
+++ b/test/invokeArgs.js
@@ -0,0 +1,66 @@
+import { assert } from 'chai';
+
+import * as RA from '../src';
+
+describe('invokeArgs', function () {
+  const testObj = {
+    innerObj: {
+      method(a, b, c) {
+        return a + b + c;
+      },
+    },
+    method(a, b, c) {
+      return a + b + c;
+    },
+    methodWithoutArgs() {
+      return 1;
+    },
+    notAMethod: 'Hello',
+  };
+
+  const testFunc = (a, b) => a + b;
+
+  const testContextObj = {
+    prop: 1,
+    method(val) {
+      return this.prop + this.prop + val;
+    },
+  };
+
+  it('should invoke the method at path of object with given arguments', function () {
+    assert.strictEqual(RA.invokeArgs(['abs'], [-1], Math), 1);
+    assert.strictEqual(RA.invokeArgs(['method'], [1, 2, 3], testObj), 6);
+    assert.strictEqual(
+      RA.invokeArgs(['innerObj', 'method'], [1, 2, 3], testObj),
+      6
+    );
+    assert.strictEqual(RA.invokeArgs(['methodWithoutArgs'], [], testObj), 1);
+  });
+
+  it('should be safe', function () {
+    assert.isUndefined(
+      RA.invokeArgs(['path', 'to', 'non-existent', 'method'], [-1], Math)
+    );
+    assert.isUndefined(RA.invokeArgs(['unknown'], [1, 2, 3], testObj));
+    assert.isUndefined(RA.invokeArgs(['notAMethod'], [1, 2, 3], testObj));
+    assert.isUndefined(RA.invokeArgs([], [1, 2, 3], testObj));
+    assert.isUndefined(RA.invokeArgs(['notAMethod'], [1, 2, 3], 'testObj'));
+    assert.isUndefined(
+      RA.invokeArgs(['innerObj', 'method', 'unknown'], [1, 2, 3], testObj)
+    );
+  });
+
+  it('should be bounded to the context', function () {
+    assert.strictEqual(RA.invokeArgs(['method'], [1], testContextObj), 3);
+  });
+
+  it('should be compatible with another invoke libraries methods', function () {
+    assert.isUndefined(RA.invokeArgs([], [1, 2], testFunc));
+  });
+
+  it('should be curried', function () {
+    assert.strictEqual(RA.invokeArgs(['abs'], [-1])(Math), 1);
+    assert.strictEqual(RA.invokeArgs(['abs'])([-1], Math), 1);
+    assert.strictEqual(RA.invokeArgs(['abs'])([-1])(Math), 1);
+  });
+});
diff --git a/test/isNotMap.js b/test/isNotMap.js
new file mode 100644
index 0000000000..c3e1c5485d
--- /dev/null
+++ b/test/isNotMap.js
@@ -0,0 +1,44 @@
+import * as R from 'ramda';
+import { assert } from 'chai';
+
+import * as RA from '../src';
+import Symbol from './shared/Symbol';
+
+describe('isNotMap', function () {
+  context('given a map', function () {
+    specify('should return false', function () {
+      assert.isFalse(RA.isNotMap(new Map()));
+      assert.isFalse(
+        RA.isNotMap(
+          new Map([
+            [1, 2],
+            [2, 1],
+          ])
+        )
+      );
+    });
+  });
+
+  context('given not a map', function () {
+    specify('should return true', function () {
+      assert.isTrue(RA.isNotMap('abc'));
+      assert.isTrue(RA.isNotMap(Object('abc')));
+      assert.isTrue(RA.isNotMap(Object()));
+      assert.isTrue(RA.isNotMap(new Date()));
+      assert.isTrue(RA.isNotMap(new Error()));
+      assert.isTrue(RA.isNotMap(RA.isNotMap));
+      assert.isTrue(RA.isNotMap(3));
+      assert.isTrue(RA.isNotMap(Symbol));
+      assert.isTrue(RA.isNotMap(R));
+      assert.isTrue(RA.isNotMap(new Set()));
+      assert.isTrue(RA.isNotMap(new Set([1, 2])));
+      assert.isTrue(RA.isNotMap(/regex/));
+    });
+  });
+
+  it('should support placeholder to specify "gaps"', function () {
+    const isNotMap = RA.isNotMap(R.__);
+
+    assert.isFalse(isNotMap(new Map()));
+  });
+});
diff --git a/test/isNotSet.js b/test/isNotSet.js
new file mode 100644
index 0000000000..7096cdcab8
--- /dev/null
+++ b/test/isNotSet.js
@@ -0,0 +1,34 @@
+import * as R from 'ramda';
+import { assert } from 'chai';
+
+import * as RA from '../src';
+import Symbol from './shared/Symbol';
+
+describe('isNotSet', function () {
+  context('given a set', function () {
+    specify('should return false', function () {
+      assert.isFalse(RA.isNotSet(new Set()));
+      assert.isFalse(RA.isNotSet(new Set([1, 2])));
+    });
+  });
+
+  context('given not a set', function () {
+    specify('should return true', function () {
+      assert.isTrue(RA.isNotSet('abc'));
+      assert.isTrue(RA.isNotSet(Object('abc')));
+      assert.isTrue(RA.isNotSet(new Date()));
+      assert.isTrue(RA.isNotSet(new Error()));
+      assert.isTrue(RA.isNotSet(RA.isNotSet));
+      assert.isTrue(RA.isNotSet(3));
+      assert.isTrue(RA.isNotSet(Symbol));
+      assert.isTrue(RA.isNotSet(R));
+      assert.isTrue(RA.isNotSet(/regex/));
+    });
+  });
+
+  it('should support placeholder to specify "gaps"', function () {
+    const isNotSet = RA.isNotSet(R.__);
+
+    assert.isFalse(isNotSet(new Set()));
+  });
+});
diff --git a/types/test/invokeArgs.ts b/types/test/invokeArgs.ts
new file mode 100644
index 0000000000..862826eb9f
--- /dev/null
+++ b/types/test/invokeArgs.ts
@@ -0,0 +1,7 @@
+import * as RA from 'ramda-adjunct';
+
+RA.invokeArgs(['abs'], [-1], Math); // $ExpectType any
+RA.invokeArgs(['nonexistentMethod'], [-1], Math); // $ExpectType any
+RA.invokeArgs([0, 'a'], [-1], Math); // $ExpectError
+RA.invokeArgs([{}], [-1], Math); // $ExpectError
+RA.invokeArgs([0], {}, Math); // $ExpectError
diff --git a/types/test/isNotMap.ts b/types/test/isNotMap.ts
new file mode 100644
index 0000000000..fda765a05a
--- /dev/null
+++ b/types/test/isNotMap.ts
@@ -0,0 +1,17 @@
+import * as RA from 'ramda-adjunct';
+
+RA.isNotMap(new Map()); // $ExpectType boolean
+RA.isNotMap(new Map([[1, 2], [2, 1]])); // $ExpectType boolean
+RA.isNotMap(new Set()); // $ExpectType boolean
+RA.isNotMap(new Set([1, 2])); // $ExpectType boolean
+RA.isNotMap(+0); // $ExpectType boolean
+RA.isNotMap(null); // $ExpectType boolean
+RA.isNotMap(true); // $ExpectType boolean
+RA.isNotMap(NaN); // $ExpectType boolean
+RA.isNotMap({}); // $ExpectType boolean
+RA.isNotMap([]); // $ExpectType boolean
+RA.isNotMap(() => {}); // $ExpectType boolean
+RA.isNotMap('string'); // $ExpectType boolean
+RA.isNotMap(1); // $ExpectType boolean
+RA.isNotMap(Object()); // $ExpectType boolean
+RA.isNotMap(Object(5)); // $ExpectType boolean
diff --git a/types/test/isNotSet.ts b/types/test/isNotSet.ts
new file mode 100644
index 0000000000..e95cf793a1
--- /dev/null
+++ b/types/test/isNotSet.ts
@@ -0,0 +1,16 @@
+import * as RA from 'ramda-adjunct';
+
+RA.isNotSet(new Set()); // $ExpectType boolean
+RA.isNotSet(new Set([1, 2])); // $ExpectType boolean
+RA.isNotSet(+0); // $ExpectType boolean
+RA.isNotSet(null); // $ExpectType boolean
+RA.isNotSet(true); // $ExpectType boolean
+RA.isNotSet(NaN); // $ExpectType boolean
+RA.isNotSet({}); // $ExpectType boolean
+RA.isNotSet([]); // $ExpectType boolean
+RA.isNotSet(() => {}); // $ExpectType boolean
+RA.isNotSet('string'); // $ExpectType boolean
+RA.isNotSet(1); // $ExpectType boolean
+RA.isNotSet(Object()); // $ExpectType boolean
+RA.isNotSet(Object(5)); // $ExpectType boolean
+RA.isNotSet(new Map()); // $ExpectType boolean