46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
/**
|
|
* Checks if a given value is a plain object.
|
|
*
|
|
* @param {object} value - The value to check.
|
|
* @returns {value is Record<PropertyKey, any>} - True if the value is a plain object, otherwise false.
|
|
*
|
|
* @example
|
|
* ```typescript
|
|
* // ✅👇 True
|
|
*
|
|
* isPlainObject({ }); // ✅
|
|
* isPlainObject({ key: 'value' }); // ✅
|
|
* isPlainObject({ key: new Date() }); // ✅
|
|
* isPlainObject(new Object()); // ✅
|
|
* isPlainObject(Object.create(null)); // ✅
|
|
* isPlainObject({ nested: { key: true} }); // ✅
|
|
* isPlainObject(new Proxy({}, {})); // ✅
|
|
* isPlainObject({ [Symbol('tag')]: 'A' }); // ✅
|
|
*
|
|
* // ✅👇 (cross-realms, node context, workers, ...)
|
|
* const runInNewContext = await import('node:vm').then(
|
|
* (mod) => mod.runInNewContext
|
|
* );
|
|
* isPlainObject(runInNewContext('({})')); // ✅
|
|
*
|
|
* // ❌👇 False
|
|
*
|
|
* class Test { };
|
|
* isPlainObject(new Test()) // ❌
|
|
* isPlainObject(10); // ❌
|
|
* isPlainObject(null); // ❌
|
|
* isPlainObject('hello'); // ❌
|
|
* isPlainObject([]); // ❌
|
|
* isPlainObject(new Date()); // ❌
|
|
* isPlainObject(new Uint8Array([1])); // ❌
|
|
* isPlainObject(Buffer.from('ABC')); // ❌
|
|
* isPlainObject(Promise.resolve({})); // ❌
|
|
* isPlainObject(Object.create({})); // ❌
|
|
* isPlainObject(new (class Cls {})); // ❌
|
|
* isPlainObject(globalThis); // ❌,
|
|
* ```
|
|
*/
|
|
declare function isPlainObject(value: unknown): value is Record<PropertyKey, any>;
|
|
|
|
export { isPlainObject };
|