On this page

P

util.types

History

util.types provides type checks for different kinds of built-in objects. Unlike instanceof or Object.prototype.toString.call(value), these checks do not inspect properties of the object that are accessible from JavaScript (like their prototype), and usually have the overhead of calling into C++.

The result generally does not make any guarantees about what kinds of properties or behavior a value exposes in JavaScript. They are primarily useful for addon developers who prefer to do type checking in JavaScript.

The API is accessible via require('node:util').types or require('node:util/types').

M

util.types.isAnyArrayBuffer

History
util.types.isAnyArrayBuffer(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in ArrayBuffer or SharedArrayBuffer instance.

See also util.types.isArrayBuffer() and util.types.isSharedArrayBuffer().

util.types.isAnyArrayBuffer(new ArrayBuffer());  // Returns true
util.types.isAnyArrayBuffer(new SharedArrayBuffer());  // Returns true
M

util.types.isArrayBufferView

History
util.types.isArrayBufferView(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an instance of one of the ArrayBuffer views, such as typed array objects or DataView. Equivalent to ArrayBuffer.isView().

util.types.isArrayBufferView(new Int8Array());  // true
util.types.isArrayBufferView(Buffer.from('hello world')); // true
util.types.isArrayBufferView(new DataView(new ArrayBuffer(16)));  // true
util.types.isArrayBufferView(new ArrayBuffer());  // false
M

util.types.isArgumentsObject

History
util.types.isArgumentsObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an arguments object.

function foo() {
  util.types.isArgumentsObject(arguments);  // Returns true
}
M

util.types.isArrayBuffer

History
util.types.isArrayBuffer(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in ArrayBuffer instance. This does not include SharedArrayBuffer instances. Usually, it is desirable to test for both; See util.types.isAnyArrayBuffer() for that.

util.types.isArrayBuffer(new ArrayBuffer());  // Returns true
util.types.isArrayBuffer(new SharedArrayBuffer());  // Returns false
M

util.types.isAsyncFunction

History
util.types.isAsyncFunction(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an async function. This only reports back what the JavaScript engine is seeing; in particular, the return value may not match the original source code if a transpilation tool was used.

util.types.isAsyncFunction(function foo() {});  // Returns false
util.types.isAsyncFunction(async function foo() {});  // Returns true
M

util.types.isBigInt64Array

History
util.types.isBigInt64Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a BigInt64Array instance.

util.types.isBigInt64Array(new BigInt64Array());   // Returns true
util.types.isBigInt64Array(new BigUint64Array());  // Returns false
M

util.types.isBigIntObject

History
util.types.isBigIntObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a BigInt object, e.g. created by Object(BigInt(123)).

util.types.isBigIntObject(Object(BigInt(123)));   // Returns true
util.types.isBigIntObject(BigInt(123));   // Returns false
util.types.isBigIntObject(123);  // Returns false
M

util.types.isBigUint64Array

History
util.types.isBigUint64Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a BigUint64Array instance.

util.types.isBigUint64Array(new BigInt64Array());   // Returns false
util.types.isBigUint64Array(new BigUint64Array());  // Returns true
M

util.types.isBooleanObject

History
util.types.isBooleanObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a boolean object, e.g. created by new Boolean().

util.types.isBooleanObject(false);  // Returns false
util.types.isBooleanObject(true);   // Returns false
util.types.isBooleanObject(new Boolean(false)); // Returns true
util.types.isBooleanObject(new Boolean(true));  // Returns true
util.types.isBooleanObject(Boolean(false)); // Returns false
util.types.isBooleanObject(Boolean(true));  // Returns false
M

util.types.isBoxedPrimitive

History
util.types.isBoxedPrimitive(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is any boxed primitive object, e.g. created by new Boolean(), new String() or Object(Symbol()).

For example:

util.types.isBoxedPrimitive(false); // Returns false
util.types.isBoxedPrimitive(new Boolean(false)); // Returns true
util.types.isBoxedPrimitive(Symbol('foo')); // Returns false
util.types.isBoxedPrimitive(Object(Symbol('foo'))); // Returns true
util.types.isBoxedPrimitive(Object(BigInt(5))); // Returns true
M

util.types.isCryptoKey

History
util.types.isCryptoKey(value): boolean
Attributes
value:Object
Returns:boolean

Returns true if value is a CryptoKey, false otherwise.

M

util.types.isDataView

History
util.types.isDataView(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in DataView instance.

const ab = new ArrayBuffer(20);
util.types.isDataView(new DataView(ab));  // Returns true
util.types.isDataView(new Float64Array());  // Returns false

See also ArrayBuffer.isView().

M

util.types.isDate

History
util.types.isDate(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Date instance.

M

util.types.isExternal

History
util.types.isExternal(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a native External value.

A native External value is a special type of object that contains a raw C++ pointer (void*) for access from native code, and has no other properties. Such objects are created either by Node.js internals or native addons. In JavaScript, they are frozen objects with a null prototype.

#include <js_native_api.h>
#include <stdlib.h>
napi_value result;
static napi_value MyNapi(napi_env env, napi_callback_info info) {
  int* raw = (int*) malloc(1024);
  napi_status status = napi_create_external(env, (void*) raw, NULL, NULL, &result);
  if (status != napi_ok) {
    napi_throw_error(env, NULL, "napi_create_external failed");
    return NULL;
  }
  return result;
}
...
DECLARE_NAPI_PROPERTY("myNapi", MyNapi)
...
import native from 'napi_addon.node';
import { types } from 'node:util';

const data = native.myNapi();
types.isExternal(data); // returns true
types.isExternal(0); // returns false
types.isExternal(new String('foo')); // returns false
const native = require('napi_addon.node');
const { types } = require('node:util');

const data = native.myNapi();
types.isExternal(data); // returns true
types.isExternal(0); // returns false
types.isExternal(new String('foo')); // returns false

For further information on napi_create_external, refer to napi_create_external().

M

util.types.isFloat16Array

History
util.types.isFloat16Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Float16Array instance.

util.types.isFloat16Array(new ArrayBuffer());  // Returns false
util.types.isFloat16Array(new Float16Array());  // Returns true
util.types.isFloat16Array(new Float32Array());  // Returns false
M

util.types.isFloat32Array

History
util.types.isFloat32Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Float32Array instance.

util.types.isFloat32Array(new ArrayBuffer());  // Returns false
util.types.isFloat32Array(new Float32Array());  // Returns true
util.types.isFloat32Array(new Float64Array());  // Returns false
M

util.types.isFloat64Array

History
util.types.isFloat64Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Float64Array instance.

util.types.isFloat64Array(new ArrayBuffer());  // Returns false
util.types.isFloat64Array(new Uint8Array());  // Returns false
util.types.isFloat64Array(new Float64Array());  // Returns true
M

util.types.isGeneratorFunction

History
util.types.isGeneratorFunction(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a generator function. This only reports back what the JavaScript engine is seeing; in particular, the return value may not match the original source code if a transpilation tool was used.

util.types.isGeneratorFunction(function foo() {});  // Returns false
util.types.isGeneratorFunction(function* foo() {});  // Returns true
M

util.types.isGeneratorObject

History
util.types.isGeneratorObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a generator object as returned from a built-in generator function. This only reports back what the JavaScript engine is seeing; in particular, the return value may not match the original source code if a transpilation tool was used.

function* foo() {}
const generator = foo();
util.types.isGeneratorObject(generator);  // Returns true
M

util.types.isInt8Array

History
util.types.isInt8Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Int8Array instance.

util.types.isInt8Array(new ArrayBuffer());  // Returns false
util.types.isInt8Array(new Int8Array());  // Returns true
util.types.isInt8Array(new Float64Array());  // Returns false
M

util.types.isInt16Array

History
util.types.isInt16Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Int16Array instance.

util.types.isInt16Array(new ArrayBuffer());  // Returns false
util.types.isInt16Array(new Int16Array());  // Returns true
util.types.isInt16Array(new Float64Array());  // Returns false
M

util.types.isInt32Array

History
util.types.isInt32Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Int32Array instance.

util.types.isInt32Array(new ArrayBuffer());  // Returns false
util.types.isInt32Array(new Int32Array());  // Returns true
util.types.isInt32Array(new Float64Array());  // Returns false
M

util.types.isKeyObject

History
util.types.isKeyObject(value): boolean
Attributes
value:Object
Returns:boolean

Returns true if value is a KeyObject, false otherwise.

M

util.types.isMap

History
util.types.isMap(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Map instance.

M

util.types.isMapIterator

History
util.types.isMapIterator(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an iterator returned for a built-in Map instance.

const map = new Map();
util.types.isMapIterator(map.keys());  // Returns true
util.types.isMapIterator(map.values());  // Returns true
util.types.isMapIterator(map.entries());  // Returns true
util.types.isMapIterator(map[Symbol.iterator]());  // Returns true
M

util.types.isModuleNamespaceObject

History
util.types.isModuleNamespaceObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an instance of a Module Namespace Object.

import * as ns from './a.js';

util.types.isModuleNamespaceObject(ns);  // Returns true
M

util.types.isNativeError

History
util.types.isNativeError(value): boolean
Stability: 0Deprecated: Use Error.isError instead.

Note: As of Node.js 24, Error.isError() is currently slower than util.types.isNativeError(). If performance is critical, consider benchmarking both in your environment.

Attributes
value:any
Returns:boolean

Returns true if the value was returned by the constructor of a built-in Error type.

console.log(util.types.isNativeError(new Error()));  // true
console.log(util.types.isNativeError(new TypeError()));  // true
console.log(util.types.isNativeError(new RangeError()));  // true

Subclasses of the native error types are also native errors:

class MyError extends Error {}
console.log(util.types.isNativeError(new MyError()));  // true

A value being instanceof a native error class is not equivalent to isNativeError() returning true for that value. isNativeError() returns true for errors which come from a different realm while instanceof Error returns false for these errors:

import { createContext, runInContext } from 'node:vm';
import { types } from 'node:util';

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(types.isNativeError(myError)); // true
console.log(myError instanceof Error); // false
const { createContext, runInContext } = require('node:vm');
const { types } = require('node:util');

const context = createContext({});
const myError = runInContext('new Error()', context);
console.log(types.isNativeError(myError)); // true
console.log(myError instanceof Error); // false

Conversely, isNativeError() returns false for all objects which were not returned by the constructor of a native error. That includes values which are instanceof native errors:

const myError = { __proto__: Error.prototype };
console.log(util.types.isNativeError(myError)); // false
console.log(myError instanceof Error); // true
M

util.types.isNumberObject

History
util.types.isNumberObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a number object, e.g. created by new Number().

util.types.isNumberObject(0);  // Returns false
util.types.isNumberObject(new Number(0));   // Returns true
M

util.types.isPromise

History
util.types.isPromise(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Promise.

M

util.types.isProxy

History
util.types.isProxy(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a Proxy instance.

const target = {};
const proxy = new Proxy(target, {});
util.types.isProxy(target);  // Returns false
util.types.isProxy(proxy);  // Returns true
M

util.types.isRegExp

History
util.types.isRegExp(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a regular expression object.

util.types.isRegExp(/abc/);  // Returns true
util.types.isRegExp(new RegExp('abc'));  // Returns true
M

util.types.isSet

History
util.types.isSet(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Set instance.

M

util.types.isSetIterator

History
util.types.isSetIterator(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is an iterator returned for a built-in Set instance.

const set = new Set();
util.types.isSetIterator(set.keys());  // Returns true
util.types.isSetIterator(set.values());  // Returns true
util.types.isSetIterator(set.entries());  // Returns true
util.types.isSetIterator(set[Symbol.iterator]());  // Returns true
M

util.types.isSharedArrayBuffer

History
util.types.isSharedArrayBuffer(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in SharedArrayBuffer instance. This does not include ArrayBuffer instances. Usually, it is desirable to test for both; See util.types.isAnyArrayBuffer() for that.

util.types.isSharedArrayBuffer(new ArrayBuffer());  // Returns false
util.types.isSharedArrayBuffer(new SharedArrayBuffer());  // Returns true
M

util.types.isStringObject

History
util.types.isStringObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a string object, e.g. created by new String().

util.types.isStringObject('foo');  // Returns false
util.types.isStringObject(new String('foo'));   // Returns true
M

util.types.isSymbolObject

History
util.types.isSymbolObject(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a symbol object, created by calling Object() on a Symbol primitive.

const symbol = Symbol('foo');
util.types.isSymbolObject(symbol);  // Returns false
util.types.isSymbolObject(Object(symbol));   // Returns true
M

util.types.isTypedArray

History
util.types.isTypedArray(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in TypedArray instance.

util.types.isTypedArray(new ArrayBuffer());  // Returns false
util.types.isTypedArray(new Uint8Array());  // Returns true
util.types.isTypedArray(new Float64Array());  // Returns true

See also ArrayBuffer.isView().

M

util.types.isUint8Array

History
util.types.isUint8Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Uint8Array instance.

util.types.isUint8Array(new ArrayBuffer());  // Returns false
util.types.isUint8Array(new Uint8Array());  // Returns true
util.types.isUint8Array(new Float64Array());  // Returns false
M

util.types.isUint8ClampedArray

History
util.types.isUint8ClampedArray(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Uint8ClampedArray instance.

util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
util.types.isUint8ClampedArray(new Float64Array());  // Returns false
M

util.types.isUint16Array

History
util.types.isUint16Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Uint16Array instance.

util.types.isUint16Array(new ArrayBuffer());  // Returns false
util.types.isUint16Array(new Uint16Array());  // Returns true
util.types.isUint16Array(new Float64Array());  // Returns false
M

util.types.isUint32Array

History
util.types.isUint32Array(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in Uint32Array instance.

util.types.isUint32Array(new ArrayBuffer());  // Returns false
util.types.isUint32Array(new Uint32Array());  // Returns true
util.types.isUint32Array(new Float64Array());  // Returns false
M

util.types.isWeakMap

History
util.types.isWeakMap(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in WeakMap instance.

M

util.types.isWeakSet

History
util.types.isWeakSet(value): boolean
Attributes
value:any
Returns:boolean

Returns true if the value is a built-in WeakSet instance.