diff --git a/packages/utils/src/eslint-utils/deepMerge.ts b/packages/utils/src/eslint-utils/deepMerge.ts index 9d275ecfc61..85412ed399d 100644 --- a/packages/utils/src/eslint-utils/deepMerge.ts +++ b/packages/utils/src/eslint-utils/deepMerge.ts @@ -6,7 +6,7 @@ type ObjectLike = Record; * @returns `true` if obj is an object */ function isObjectNotArray(obj: unknown): obj is T { - return typeof obj === 'object' && !Array.isArray(obj); + return typeof obj === 'object' && obj != null && !Array.isArray(obj); } /** diff --git a/packages/utils/tests/eslint-utils/applyDefault.test.ts b/packages/utils/tests/eslint-utils/applyDefault.test.ts index ec9411c31c2..12566d44e94 100644 --- a/packages/utils/tests/eslint-utils/applyDefault.test.ts +++ b/packages/utils/tests/eslint-utils/applyDefault.test.ts @@ -59,4 +59,18 @@ describe('applyDefault', () => { expect(result).not.toBe(defaults); expect(result).not.toBe(user); }); + + it('should work when default option is null', () => { + const defaults: unknown[] = [null]; + const user: unknown[] = [ + { + prop: 'setting1', + other: 'other', + }, + ]; + const result = ESLintUtils.applyDefault(defaults, user); + expect(result).toStrictEqual(user); + expect(result).not.toBe(defaults); + expect(result).not.toBe(user); + }); });