Skip to content

patik/kind

Folders and files

NameName
Last commit message
Last commit date
Jan 1, 2024
May 8, 2022
Jul 10, 2023
Jan 3, 2023
May 8, 2022
Jan 23, 2023
May 8, 2022
May 8, 2022
Aug 12, 2023
May 8, 2022
Jan 23, 2023
Jan 23, 2023
Jan 23, 2023
Jan 3, 2023
Jan 1, 2024
Jan 23, 2023
Jan 12, 2024

Repository files navigation

A precise typechecker for JavaScript

npm package Build Status Downloads Issues Code Coverage

Description

kind() returns a useful name for a variable's type. It breaks down objects into more precise terms: array, null, element, etc.

Examples:

Input typeof kind
[1, 2, 3] "object" "array"
null "object" "null"
new Promise(() => null) "object" "promise"
document.getElementById('id') "object" "element"
document.getElementsByTagName('div') "object" "nodelist"
document.createTextNode('') "object" "node"
new Date() "object" "date"
{} "object" "object" (if no special type was detected — see full list below)

Install

yarn: yarn add kindjs

npm: npm install kindjs

Usage

import kind from 'kindjs';

kind(['hello', 'world']);
//=> 'array'

Basic

// Objects that aren't *really* objects
kind(null);       // "null"
kind([1, 2, 3]);  // "array"
kind(arguments);  // "arraylike"
kind(new Date()); // "date"
kind(document.getElementById('id'));        // "element"
kind(document.getElementsByTagName('div')); // "nodelist"

// This one's actually just an object
kind({});         // "object"

// Also works on standard types
kind("text");     // "string"
kind(2);          // "number"
kind(alert);      // "function"

"Deep" option

You may add a second, boolean parameter to tell kind to perform a deeper test for some types. For example, instead of "number" it could return "integer" or "float".

kind(1);          // "number"
kind(1, true);    // "integer"

kind(1.21);       // "number"
kind(1.21, true); // "float"

kind(evt);        // "event"
kind(evt, true);  // "mouseevent" (i.e. if the event was a click)

A complete list is noted below

Supported types

  • All standard types normally returned by typeof:
    • function, undefined, boolean, symbol
    • string
      • Deep option returns either string or emptystring
    • number
      • Deep option returns either integer or float
  • array
  • arraylike
    • A non-array object with a .length property
  • null
  • element
  • node
    • Deep options from this list (e.g. text, comment)
  • nodelist
  • event
    • Deep options from this list (e.g. mouseevent, keyboardevent)
  • regexp
  • date
  • error
  • errorevent
  • math
  • promise
  • set
  • url (i.e. an instance of the URL() constructor)
  • urlsearchparams
  • map

Features

  • Works with any type, not just objects
  • Always returns a simple lowercase string, just like the native typeof
  • TypeScript support
  • Handles undefined or undeclared variables
  • Optimized to check for the most common types first
  • Excellent browser support, including many very old browsers
    • IE 6+ (and maybe older)
    • Chrome
    • Firefox
    • Safari
    • Android 1+
    • Opera (pre-Blink)
    • Netscape 4 (in theory!)
    • Probably anything that runs JavaScript and supports regular expressions