Skip to content

Commit b8c4f5c

Browse files
committed
Add isPlainObject() method
1 parent c1856bf commit b8c4f5c

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

src/is-plain-object.test.ts

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// -----------------------------------------------------------------------------
2+
// Deps
3+
// -----------------------------------------------------------------------------
4+
5+
import { isPlainObject } from './is-plain-object';
6+
7+
// -----------------------------------------------------------------------------
8+
// Tests
9+
// -----------------------------------------------------------------------------
10+
11+
const testCases: {
12+
parameters: Parameters<typeof isPlainObject>;
13+
result: ReturnType<typeof isPlainObject>;
14+
}[] = [
15+
{
16+
parameters: [null],
17+
result: false
18+
},
19+
{
20+
parameters: [undefined],
21+
result: false
22+
},
23+
{
24+
parameters: ['string'],
25+
result: false
26+
},
27+
{
28+
parameters: [new String()],
29+
result: true
30+
},
31+
{
32+
parameters: [new Number()],
33+
result: true
34+
},
35+
{
36+
parameters: [new Boolean()],
37+
result: true
38+
},
39+
{
40+
parameters: [new Function()],
41+
result: true
42+
},
43+
{
44+
parameters: [789],
45+
result: false
46+
},
47+
{
48+
parameters: [['array']],
49+
result: false
50+
},
51+
{
52+
parameters: [new Array(2)],
53+
result: false
54+
},
55+
{
56+
parameters: [{}],
57+
result: true
58+
},
59+
{
60+
parameters: [
61+
{
62+
key: 'value'
63+
}
64+
],
65+
result: true
66+
},
67+
{
68+
parameters: [new Object(null)],
69+
result: true
70+
},
71+
{
72+
parameters: [new Date()],
73+
result: true
74+
},
75+
{
76+
parameters: [new Date()],
77+
result: true
78+
},
79+
{
80+
parameters: [new RegExp('x')],
81+
result: true
82+
}
83+
];
84+
85+
describe('isPlainObject tool', () => {
86+
testCases.forEach(({ parameters, result }, i) => {
87+
test(`test #${i + 1}: ${parameters.join(', ')}`, () => {
88+
const bool = isPlainObject(...parameters);
89+
expect(bool).toStrictEqual(result);
90+
});
91+
});
92+
});

src/is-plain-object.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// -----------------------------------------------------------------------------
2+
// Deps
3+
// -----------------------------------------------------------------------------
4+
5+
import { IPlainObject } from './types';
6+
7+
// -----------------------------------------------------------------------------
8+
// Helper
9+
// -----------------------------------------------------------------------------
10+
11+
/**
12+
* @param sample
13+
* @return {boolean}
14+
*/
15+
export function isPlainObject<GValue = any>(sample: any): sample is IPlainObject<GValue> {
16+
return sample instanceof Object && !Array.isArray(sample);
17+
}

0 commit comments

Comments
 (0)