is-constructable v1.0.0
is-constructable
is-constructable provides a type predicate for identifying if a function is constructable, i.e. whether it can be used with the new operator, without actually invoking the constructor.
Install
# If you use npm
npm install is-constructable
# If you use yarn
yarn add is-constructableUsage
import { isConstructable } from "is-constructable";
isConstructable(function () {}); // true
isConstructable(class A {}); // true
isConstructable(Array); // true
isConstructable(Function); // true
isConstructable(new Function()); // true
isConstructable(undefined); // false
isConstructable(null); // false
isConstructable(1); // false
isConstructable(new Number(1)); // false
isConstructable(Array.prototype); // false
isConstructable(Function.prototype); // false
isConstructable({ method() {} }.method); // false
isConstructable(() => {}); // false
isConstructable(async () => {}); // false
isConstructable(async function f() {}); // false
isConstructable(function* f() {}); // false
isConstructable(async function* f() {}); // falseNote: If you transpile to ES5 or below, your transpiler will convert some or all of your arrow functions, async functions, async arrow functions, generator functions and async generator functions to plain old functions, which are constructable in contrast to the original objects.
Under the hoood, the library implements two equivalent checks, one using Reflect and one using Proxy, which can be imported explicitly if so desired.
import { testIfConstructableWithProxy, testIfConstructableWithReflect } from "is-constructable";
testIfConstructableWithProxy(function () {}); // true
testIfConstructableWithReflect(function () {}); // trueisConstructable will first attempt the check using Proxy and only if that fails, it will try to using the check using Reflect, because the Proxy check is about 3.3 times faster than the check using Reflect.
License
3 years ago