typeofanything v1.2.6
typeof anything
Ecmascript can be a bitch when it comes to (determining) the type of variables. Sometimes typeof
/instanceof
/constructor
etc. will
just not give the right results. On the other hand I don't want to abandon dynamic typing, it offers that much more than static typing
(so, no typescript here). But still, there are moments where I want to be more certain that a variable is of the type I actually
need (e.g in my JQL library).
So I created this little module/library. It tries to provide a function to determine a type of anything your throw at it.
The code is available as an (importable) module, as a browser script and from NPM.
Import the module
Your script should be of type module
.
<script type="module">
import IS from "[path to]/typeofany.module.js";
// or
const IS = (await import("[path to]/typeofany.module.js")).default;
</script>
Use in browser
Create a script tag in your html:
<script src="[path to]/typeofany.browser.js")</script>
Subsequently in your script (for example)
<script>
const isObject = IS({}, Array, Object);
const nothing = null;
const isNothingNull = nothing?.[is](null) || $Wrap(nothing).is(null);
/* ... */
</script>
Use in browser with factory
Create a script tag in your html:
<script src="[path to]/typeofany.browser-factory.js")</script>
Subsequently in your script (for example)
<script>
const {IS, $Wrap} = TOAFactory();
const isObject = IS({}, Array, Object);
const nothing = null;
const isNothingNull = nothing?.is(null) || $Wrap(nothing).is(null);
/* ... */
</script>
Syntax
[imported IS function](anything, [...type])
Return value
The method returns either a boolean (anything
is/is not (one of) [...type]
)
or a string representation of the found 'type' (may also be null
, NaN
or undefined
).
For checking if anything
is (one of) [...type]
, the level of specificity is
up to the prototype of anything
(when it is found). For example
IS(document.createElement("div"), HTMLDivElement)
andIS(document.createElement("div"), HTMLElement)
are both true, butIS(document.createElement("div"), Node)
will be false.IS(Array, Object)
will be false,IS(Array, Array)
true.
Examples
// assume the function is imported as IS
const showMeMyType = something => IS(something)
const someObj = {a: 1, b: `hello`, c: `world`};
const wMap = new WeakMap();
IS(someObj); // => Object
showMeMyType(wMap); // => WeakMap
IS(someObj, Object); // => true
IS(someObj, Array, String); // => false
IS(someObj, Symbol, String, RegExp, Object); // => true
IS(null); //=> null
IS(null, undefined); //=> false
IS(null, null); //=> true
IS(/[a-z]/gi, RegExp); //=> true
The library can do a lot more (e.g. check if something is a Proxy
instance).
To see it in action, see the examples in this [Stackblitz project).
9 months ago
1 year ago
1 year ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago