@everget/typeof
v3.0.1
Published
A smart typeof operator replacement and robust checker
Downloads
17
Readme
typeOf
A smart replacement of the typeof operator and robust type checker. This is my first ever published module on npm (2017). I have rewritten it to the modern stack (TypeScript, Vitest) without functional changes.
Installation
pnpm add @everget/typeof
Usage
const typeOf = require('@everget/typeof');
// or
import typeOf from '@everget/typeof';
let value = 'awesome string';
typeOf(value)();
// => 'string'
typeOf(value) == 'string';
// => true
typeOf(value).expect('string');
// => true
typeOf(value).expect('number');
// => TypeError: The value is of type `string`, but expected `number`
/** NOTE: you must use `==` operator for correct work */
let isMap = (value) => typeOf(value)() == 'map';
let smth = new Map();
if (isMap(smth)) {
/** Do your staff */
}
let isFunction = (value) => {
return typeOf(value).expect('function|asyncfunction|generatorfunction');
}
let smth = async () => {};
if (isFunction(smth)) {
/** Do your staff */
}
function sum(a, b) {
typeOf(a).expect('number');
typeOf(b).expect('number');
return typeOf(a + b).expect('number') && (a + b);
}
sum(1, () => {});
// => TypeError: The value is of type `function`, but expected `number`
sum(1, 2);
// => 3
Examples of returned values
ES
Value | Type ----------------------------------- | ---- {} | 'object' Math | 'math' JSON | 'object' function() {} | 'function' [] | 'array' null | 'null' (function() { return arguments })() | 'arguments' new Error | 'error' undefined | 'underfined'
ES6, ES7
Value | Type ----------------------------- | ---- Reflect | 'object' class {} | 'function' Proxy | 'function' new Proxy({}, {}) | 'object' () => {} | 'function' function* () {} | 'generatorfunction' async function() {} | 'asyncfunction' Symbol | 'function' Symbol() | 'symbol' new Map | 'map' new WeakMap | 'weakmap' new Set | 'set' new WeakSet | 'weakset' [1, 2, 3].entries() | 'arrayiterator' new Set().entries() | 'setiterator' new Map().entries() | 'mapiterator' ''Symbol.iterator | 'stringiterator' new ArrayBuffer() | 'arraybuffer' new DataView(new ArrayBuffer) | 'dataview'
Browser
Value | Type ---------------------------------- | ---- window | 'global' document | 'htmldocument' localStorage | 'storage' new DOMException | 'domexception' document.createDocumentFragment() | 'documentfragment' document.createElement('a') | 'htmlanchorelement' document.createElement('body') | 'htmlbodyelement' document.createElement('template') | 'htmltemplateelement' document.createTextNode('') | 'text' document.createComment('') | 'comment'
Node.js
Value | Type ------- | ---- global | 'global' process | 'process'
Tests
npm test
Release History
- 0.1.0 Initial release
- 0.1.1 Added detection of typed arrays
- 2.0.0 Corrections for global object, Math, JSON, async functions and generators
- 3.0.0 Implemented new usage syntax. Added correct detection of iterators