{"id":13671395,"url":"https://github.com/twada/type-name","last_synced_at":"2025-04-05T18:08:38.666Z","repository":{"id":17630845,"uuid":"20435142","full_name":"twada/type-name","owner":"twada","description":"Just a reasonable `typeof`","archived":false,"fork":false,"pushed_at":"2023-04-15T20:10:13.000Z","size":124,"stargazers_count":84,"open_issues_count":2,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-29T17:08:28.290Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/twada.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-06-03T08:28:58.000Z","updated_at":"2023-07-26T06:49:53.000Z","dependencies_parsed_at":"2024-06-18T13:41:58.299Z","dependency_job_id":null,"html_url":"https://github.com/twada/type-name","commit_stats":{"total_commits":102,"total_committers":6,"mean_commits":17.0,"dds":0.06862745098039214,"last_synced_commit":"09d8968bab0e099a92ba58cdee0444ce0b9d2469"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twada%2Ftype-name","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twada%2Ftype-name/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twada%2Ftype-name/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/twada%2Ftype-name/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/twada","download_url":"https://codeload.github.com/twada/type-name/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247378149,"owners_count":20929297,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T09:01:08.485Z","updated_at":"2025-04-05T18:08:38.648Z","avatar_url":"https://github.com/twada.png","language":"JavaScript","readme":"type-name\n================================\n\nJust a reasonable `typeof`\n\n[![Build Status][ci-image]][ci-url]\n[![NPM version][npm-image]][npm-url]\n[![License][license-image]][license-url]\n\n\nDESCRIPTION\n---------------------------------------\n\n`typeName` function returns reasonable type name for input value.\n\n| description    | input   | result      |\n|:---------------|:--------|:------------|\n| null literal   | `null`  | `'null'`    |\n| undefined value | `undefined` | `'undefined'` |\n| string literal | `'foo'` | `'string'` |\n| number literal | `5` | `'number'` |\n| boolean literal | `false` | `'boolean'` |\n| regexp literal *(Android 4.1+)* | `/^not/` | `'RegExp'` |\n| array literal | `['foo', 4]` | `'Array'` |\n| object literal | `{name: 'bar'}` | `'Object'` *(be careful!)* |\n| function expression | `function () {}` | `'function'` |\n| String object | `new String('foo')` | `'String'` |\n| Number object | `new Number('3')` | `'Number'` |\n| Boolean object |`new Boolean('1')` | `'Boolean'` |\n| Date object | `new Date()` | `'Date'` |\n| RegExp object *(Android 4.1+)* | `new RegExp('^not', 'g')` | `'RegExp'` |\n| Array object | `new Array()` | `'Array'` |\n| Object object | `new Object()` | `'Object'` |\n| Function object | `new Function('x', 'y', 'return x + y')` | `'function'` *(be careful!)* |\n| Error object | `new Error('error!')` | `'Error'` |\n| TypeError object | `new TypeError('type error!')` | `'TypeError'` |\n| NaN | `NaN` | `'number'` |\n| Infinity | `Infinity` | `'number'` |\n| Math | `Math` | `'Math'` |\n| JSON *(IE8+)* | `JSON` | `'JSON'` |\n| arguments object *(IE9+)*  | `(function(){ return arguments; })()` | `'Arguments'` |\n| User-defined constructor | `new Person('alice', 5)` | `'Person'` |\n| Anonymous constructor | `new AnonPerson('bob', 4)` | `''` |\n| Named class | `new(class Foo { constructor() {} })` | `'Foo'` |\n| Anonymous class | `new(class { constructor() {} })` | `''` |\n| Symbol | `Symbol(\"FOO\")` | `'symbol'` |\n| Promise | `Promise.resolve(1)` | `'Promise'` |\n\n\nEXAMPLE\n---------------------------------------\n\n```javascript\nconst typeName = require('type-name');\nconst assert = require('assert');\n\nassert(typeName(null) === 'null');\nassert(typeName(undefined) === 'undefined');\nassert(typeName('foo') === 'string');\nassert(typeName(5) === 'number');\nassert(typeName(false) === 'boolean');\nassert(typeName(/^not/) === 'RegExp');\nassert(typeName(['foo', 4]) === 'Array');\nassert(typeName({name: 'bar'}) === 'Object');\nassert(typeName(function () {}) === 'function');\nassert(typeName(new String('foo')) === 'String');\nassert(typeName(new Number('3')) === 'Number');\nassert(typeName(new Boolean('1')) === 'Boolean');\nassert(typeName(new Date()) === 'Date');\nassert(typeName(new RegExp('^not', 'g')) === 'RegExp');\nassert(typeName(new Array()) === 'Array');\nassert(typeName(new Object()) === 'Object');\nassert(typeName(new Function('x', 'y', 'return x + y')) === 'function');\nassert(typeName(new Error('error!')) === 'Error');\nassert(typeName(new TypeError('type error!')) === 'TypeError');\nassert(typeName(NaN) === 'number');\nassert(typeName(Infinity) === 'number');\nassert(typeName(Math) === 'Math');\nassert(typeName(JSON) === 'JSON'); // IE8+\nassert(typeName((function(){ return arguments; })()) === 'Arguments');  // IE9+\nassert(typeName(Symbol(\"FOO\")) === 'symbol');\nassert(typeName(Promise.resolve(1)) === 'Promise');\n\nfunction Person(name, age) {\n    this.name = name;\n    this.age = age;\n}\n\nconst AnonPerson = function(name, age) {\n    this.name = name;\n    this.age = age;\n};\n\nassert(typeName(new Person('alice', 5)) === 'Person');\nassert(typeName(new AnonPerson('bob', 4)) === '');\n\nassert(typeName(new(class Foo { constructor() {} })) === 'Foo');\nassert(typeName(new(class { constructor() {} })) === '');\n```\n\n\nINSTALL\n---------------------------------------\n\n    $ npm install --save type-name\n\n\nUSAGE\n---------------------------------------\n\n```javascript\nconst typeName = require('type-name');\nconsole.log(typeName(anyVar));\n```\n\n\nAUTHOR\n---------------------------------------\n* [Takuto Wada](https://github.com/twada)\n\n\nCONTRIBUTORS\n---------------------------------------\n* [azu](https://github.com/azu)\n* [Yosuke Furukawa](https://github.com/yosuke-furukawa)\n* [Athan](https://github.com/kgryte)\n* [Andrew Moss](https://github.com/inversion)\n\n\nLICENSE\n---------------------------------------\nLicensed under the [MIT](https://github.com/twada/type-name/blob/master/LICENSE) license.\n\n\n[npm-url]: https://npmjs.org/package/type-name\n[npm-image]: https://badge.fury.io/js/type-name.svg\n\n[ci-image]: https://github.com/twada/type-name/workflows/Node.js%20CI/badge.svg\n[ci-url]: https://github.com/twada/type-name/actions?query=workflow%3A%22Node.js+CI%22\n\n[license-url]: https://github.com/twada/type-name/blob/master/LICENSE\n[license-image]: https://img.shields.io/badge/license-MIT-brightgreen.svg\n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwada%2Ftype-name","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwada%2Ftype-name","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwada%2Ftype-name/lists"}