You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
'use strict';
|
|
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
// get the type of a value with handling the edge cases like `typeof []`
|
|
// and `typeof null`
|
|
function getType(value) {
|
|
if (value === undefined) {
|
|
return 'undefined';
|
|
} else if (value === null) {
|
|
return 'null';
|
|
} else if (Array.isArray(value)) {
|
|
return 'array';
|
|
} else if (typeof value === 'boolean') {
|
|
return 'boolean';
|
|
} else if (typeof value === 'function') {
|
|
return 'function';
|
|
} else if (typeof value === 'number') {
|
|
return 'number';
|
|
} else if (typeof value === 'string') {
|
|
return 'string';
|
|
} else if (typeof value === 'bigint') {
|
|
return 'bigint';
|
|
} else if (typeof value === 'object') {
|
|
if (value != null) {
|
|
if (value.constructor === RegExp) {
|
|
return 'regexp';
|
|
} else if (value.constructor === Map) {
|
|
return 'map';
|
|
} else if (value.constructor === Set) {
|
|
return 'set';
|
|
} else if (value.constructor === Date) {
|
|
return 'date';
|
|
}
|
|
}
|
|
|
|
return 'object';
|
|
} else if (typeof value === 'symbol') {
|
|
return 'symbol';
|
|
}
|
|
|
|
throw new Error(`value of unknown type: ${value}`);
|
|
}
|
|
|
|
getType.isPrimitive = value => Object(value) !== value;
|
|
|
|
module.exports = getType;
|
|
|