easytype
Just something better then typeof
Install
npm i easytype
Usage
const type = require('easytype'); type() //'Undefined'type(undefined) //'Undefined'type(void 0) //'Undefined' type(null) //'Null' type('') //'String'type('🦄') //'String' type(true) //'Boolean'type(false) //'Boolean'type(type(Boolean()) //'Boolean'type(type(Boolean(1)) //'Boolean'type(type(new Boolean()) //'Boolean' type(0) //'Number'type(-1.5) //'Number'type(NaN) //'Number'type(Infinity) //'Number'type(Number()) //'Number'type(Number(-1.5)) //'Number'type(Number('-1.5')) //'Number'type(Number(true)) //'Number'type(Number('1string')) //'Number'type(Number('string')) //'Number'type(new Number()) //'Number' type(Symbol('test')) //'Symbol'type(Symbol()) //'Symbol' type({}) //'Object'type(Object()) //'Object'type(new Object()) //'Object'type(Object.create(null)) //'Object' type(Math) //'Math'type(JSON) //'JSON' type([]) //'Array'type(Array()) //'Array'type(new Array()) //'Array'type(Array.from('123')) //'Array' type(() => {}) //'Function'type(function(){}) //'Function'type(Object) //'Function'type(new Function()) //'Function'type(new Function('return 0;')) //'Function' type(/^.*$/) //'RegExp'type(new RegExp('^.*$')) //'RegExp'type(new RegExp('ab+c', 'ig')) //'RegExp' type(new Date()) //'Date'type(new Date(0)) //'Date' type(new Set()) //'Set'type(new Map()) //'Map'type(new WeakSet()) //'WeakSet'type(new WeakMap()) //'WeakMap' type(new Error()) //'Error'type(new EvalError()) //'Error'type(new RangeError()) //'Error'type(new ReferenceError()) //'Error'type(new SyntaxError()) //'Error'type(new TypeError()) //'Error'type(new URIError()) //'Error' type(new Int8Array()) //'Int8Array'type(new Uint8Array()) //'Uint8Array'type(new Uint8ClampedArray()) //'Uint8ClampedArray'type(new Int16Array()) //'Int16Array'type(new Uint16Array()) //'Uint16Array'type(new Int32Array()) //'Int32Array'type(new Uint32Array()) //'Uint32Array'type(new Float32Array()) //'Float32Array'type(new Float64Array()) //'Float64Array' type(new Promise(() => {})) //'Promise'type((Promise.resolve(1)) //'Promise' // Shortcuts: // // returns true:type.isUndefined()type.isDefined('test')type.isNull(null)type.isString('')type.isBoolean(true)type.isNumber(1)type.isArray([])type.isObject({})type.isFunction(() => {})type.isRegExp(/^.*$/)type.isDate(new Date())type.isSet(new Set())type.isMap(new Map())type.isWeakSet(new WeakSet())type.isWeakMap(new WeakMap())type.isSymbol(Symbol('test'))type.isError(new Error())type.isPromise(new Promise(() => {})) // returns false:type.isUndefined('test')type.isDefined()type.isNull('null')type.isString(true)type.isBoolean('true')type.isNumber('1')type.isArray({length: 1})type.isObject(null)type.isFunction(global)type.isRegExp('/^.*$/')type.isDate('Sat Dec 23 2017 18:44:45 GMT+0300 (MSK)')type.isSet(new WeakSet())type.isMap(new WeakMap())type.isWeakSet(new Set())type.isWeakMap(new Map())type.isSymbol([Symbol('test')])type.isError(Error)type.isPromise(Promise.all) // Advanced: type.isNumber.finite(0) //truetype.isNumber.finite(2e64) //truetype.isNumber.finite(-1.5) //truetype.isNumber.finite(NaN) //falsetype.isNumber.finite(Infinity) //falsetype.isNumber.finite(-Infinity) //false type.isNaN(NaN) //truetype.isNaN('NaN') //falsetype.isNaN(Infinity) //falsetype.isNaN() //falsetype.isNaN(0) //falsetype.isNaN(null) //falsetype.isNaN([NaN]) //false // let's play with it:const o = Object.create(null)function F(){} // pure object (null prototype)type.isObject.pure(o) //true type.isObject.pure({}) //falsetype.isObject.pure(Object()) //falsetype.isObject.pure(new Object()) //falsetype.isObject.pure(new F()) //false // plain object (native Object prototype)type.isObject.plain({}) //truetype.isObject.plain(o) //truetype.isObject.plain(Object()) //truetype.isObject.plain(new Object()) //true type.isObject.plain(Object(1)) //falsetype.isObject.plain(new Object('')) //falsetype.isObject.plain(new F()) //falsetype.isObject.plain(new Date()) //falsetype.isObject.plain([]) //falsetype.isObject.plain(1) //falsetype.isObject.plain(null) //falsetype.isObject.plain() //false // primitive (x !== Object(x))type.isPrimitive(undefined) //truetype.isPrimitive(null) //truetype.isPrimitive(true) //truetype.isPrimitive(1) //truetype.isPrimitive('test') //truetype.isPrimitive(Boolean()) //truetype.isPrimitive(Number()) //truetype.isPrimitive(String()) //true type.isPrimitive({}) //falsetype.isPrimitive([]) //falsetype.isPrimitive(Object(undefined)) //falsetype.isPrimitive(Object(null)) //falsetype.isPrimitive(Object(true)) //falsetype.isPrimitive(Object(1)) //falsetype.isPrimitive(Object('test')) //falsetype.isPrimitive(new Boolean()) //falsetype.isPrimitive(new Number()) //falsetype.isPrimitive(new String()) //falsetype.isPrimitive(new Date()) //falsetype.isPrimitive(new F()) //false // easy ('Boolean', 'Null', 'Number' or 'String')type.isEasy(null) //truetype.isEasy(true) //truetype.isEasy(false) //truetype.isEasy(1) //truetype.isEasy('') //truetype.isEasy('test') //true type.isEasy({}) //falsetype.isEasy(Object()) //falsetype.isEasy([]) //falsetype.isEasy(new F()) //falsetype.isEasy(undefined) //falsetype.isEasy() //falsetype.isEasy(Symbol('test')) //false type.isArray.ofNumbers([0, -1.5, NaN]) //truetype.isArray.ofStrings(['', 'test']) //truetype.isArray.ofBooleans([true, false]) //truetype.isArray.ofFunctions([function(){}, () => {}, F]) //truetype.isArray.ofObjects([{}, Object(), new Object(), o]) //truetype.isArray.ofArrays([[], [1, 2, 3], Array(10)]) //truetype.isArray.ofPrimitives([undefined, null, true, 1, '']) //truetype.isArray.ofEasies([null, true, 1, '']) //truetype.isArray.empty([]) //true // easy or array of easiestype.isSerializable(null) //truetype.isSerializable(true) //truetype.isSerializable(1) //truetype.isSerializable('') //truetype.isSerializable([]) //truetype.isSerializable([null, true, 1, '']) //true type.isSerializable([undefined, [], {}]) //false
License
MIT