diff --git a/lib/modules/datasource/datasource.spec.ts b/lib/modules/datasource/datasource.spec.ts
index e36bd37b2eb867d29cd8148202af2161e7dbc086..bf74641b1c7b8f423c58df4048e9fc3726db8011 100644
--- a/lib/modules/datasource/datasource.spec.ts
+++ b/lib/modules/datasource/datasource.spec.ts
@@ -30,7 +30,7 @@ describe('modules/datasource/datasource', () => {
     httpMock.scope(exampleUrl).get('/').reply(429);
 
     await expect(
-      testDatasource.getReleases(partial<GetReleasesConfig>({}))
+      testDatasource.getReleases(partial<GetReleasesConfig>())
     ).rejects.toThrow(EXTERNAL_HOST_ERROR);
   });
 });
diff --git a/lib/modules/manager/gradle/extract.spec.ts b/lib/modules/manager/gradle/extract.spec.ts
index 32ceb9a1e5f9228f2f1b4a1cd4cc0b67ad0d0bbf..c5ea256fcc971cfb1a71136628e5e73a62169d05 100644
--- a/lib/modules/manager/gradle/extract.spec.ts
+++ b/lib/modules/manager/gradle/extract.spec.ts
@@ -41,7 +41,7 @@ describe('modules/manager/gradle/extract', () => {
 
     expect(
       await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       )
     ).toBeNull();
@@ -54,7 +54,7 @@ describe('modules/manager/gradle/extract', () => {
     jest.spyOn(parser, 'parseGradle').mockImplementationOnce(() => {
       throw err;
     });
-    await extractAllPackageFiles(partial<ExtractConfig>({}), [filename]);
+    await extractAllPackageFiles(partial<ExtractConfig>(), [filename]);
 
     expect(logger.logger.warn).toHaveBeenCalledWith(
       { err, config: {}, packageFile: filename },
@@ -70,7 +70,7 @@ describe('modules/manager/gradle/extract', () => {
     mockFs(fsMock);
 
     const res = await extractAllPackageFiles(
-      partial<ExtractConfig>({}),
+      partial<ExtractConfig>(),
       Object.keys(fsMock)
     );
 
@@ -97,7 +97,7 @@ describe('modules/manager/gradle/extract', () => {
     mockFs(fsMock);
 
     const res = await extractAllPackageFiles(
-      partial<ExtractConfig>({}),
+      partial<ExtractConfig>(),
       Object.keys(fsMock)
     );
 
@@ -127,7 +127,7 @@ describe('modules/manager/gradle/extract', () => {
     mockFs(fsMock);
 
     const res = await extractAllPackageFiles(
-      partial<ExtractConfig>({}),
+      partial<ExtractConfig>(),
       Object.keys(fsMock)
     );
 
@@ -174,7 +174,7 @@ describe('modules/manager/gradle/extract', () => {
     mockFs(fsMock);
 
     const res = await extractAllPackageFiles(
-      partial<ExtractConfig>({}),
+      partial<ExtractConfig>(),
       Object.keys(fsMock)
     );
 
@@ -199,7 +199,7 @@ describe('modules/manager/gradle/extract', () => {
     mockFs(fsMock);
 
     const res = await extractAllPackageFiles(
-      partial<ExtractConfig>({}),
+      partial<ExtractConfig>(),
       Object.keys(fsMock)
     );
 
@@ -233,7 +233,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -281,7 +281,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -342,7 +342,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -380,7 +380,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
       expect(res).toMatchObject([
@@ -494,7 +494,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -610,7 +610,7 @@ describe('modules/manager/gradle/extract', () => {
 
       expect(
         await extractAllPackageFiles(
-          partial<ExtractConfig>({}),
+          partial<ExtractConfig>(),
           Object.keys(fsMock)
         )
       ).toBeNull();
@@ -632,7 +632,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
       expect(res).toMatchObject([
@@ -675,7 +675,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
       expect(res).toMatchObject([
@@ -745,7 +745,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -825,7 +825,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -847,7 +847,7 @@ describe('modules/manager/gradle/extract', () => {
 
       expect(
         await extractAllPackageFiles(
-          partial<ExtractConfig>({}),
+          partial<ExtractConfig>(),
           Object.keys(fsMock)
         )
       ).toBeNull();
@@ -861,7 +861,7 @@ describe('modules/manager/gradle/extract', () => {
 
       expect(
         await extractAllPackageFiles(
-          partial<ExtractConfig>({}),
+          partial<ExtractConfig>(),
           Object.keys(fsMock)
         )
       ).toBeNull();
@@ -881,7 +881,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
@@ -929,7 +929,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
       expect(res).toBeNull();
@@ -943,7 +943,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
       expect(res).toBeNull();
@@ -970,7 +970,7 @@ describe('modules/manager/gradle/extract', () => {
       mockFs(fsMock);
 
       const res = await extractAllPackageFiles(
-        partial<ExtractConfig>({}),
+        partial<ExtractConfig>(),
         Object.keys(fsMock)
       );
 
diff --git a/lib/modules/manager/gradle/parser/common.spec.ts b/lib/modules/manager/gradle/parser/common.spec.ts
index c1b6879406d73bafc47604a773e7281f164dfaf7..7b8779b0a17f791a97ba0f390a321870dac56601 100644
--- a/lib/modules/manager/gradle/parser/common.spec.ts
+++ b/lib/modules/manager/gradle/parser/common.spec.ts
@@ -98,13 +98,13 @@ describe('modules/manager/gradle/parser/common', () => {
     expect(
       interpolateString(
         partial<lexer.Token>([{ type: 'symbol', value: 'foo' }]),
-        partial<PackageVariables>({})
+        partial<PackageVariables>()
       )
     ).toBeNull();
     expect(
       interpolateString(
         partial<lexer.Token>([{ type: '_', value: 'foo' }]),
-        partial<PackageVariables>({})
+        partial<PackageVariables>()
       )
     ).toBeNull();
   });
diff --git a/lib/modules/manager/npm/post-update/lerna.spec.ts b/lib/modules/manager/npm/post-update/lerna.spec.ts
index 40a219bd9bbde7da43ab16114f581ded22a8f3f5..cacc6fb2a514ecb7d7c7209402d14d883f48b471 100644
--- a/lib/modules/manager/npm/post-update/lerna.spec.ts
+++ b/lib/modules/manager/npm/post-update/lerna.spec.ts
@@ -27,7 +27,7 @@ function lernaPkgFileWithoutLernaDep(
   };
 }
 
-const config = partial<PostUpdateConfig>({});
+const config = partial<PostUpdateConfig>();
 
 describe('modules/manager/npm/post-update/lerna', () => {
   const globalConfig: RepoGlobalConfig = {
diff --git a/lib/modules/manager/npm/post-update/pnpm.spec.ts b/lib/modules/manager/npm/post-update/pnpm.spec.ts
index 8f5091329b7dfe3819996877e10f778a529d4c45..8b23def995ecc573b86859a6aba4e63373339a90 100644
--- a/lib/modules/manager/npm/post-update/pnpm.spec.ts
+++ b/lib/modules/manager/npm/post-update/pnpm.spec.ts
@@ -108,7 +108,7 @@ describe('modules/manager/npm/post-update/pnpm', () => {
 
   it('uses constraint version if parent json has constraints', async () => {
     const execSnapshots = mockExecAll();
-    const configTemp = partial<PostUpdateConfig>({});
+    const configTemp = partial<PostUpdateConfig>();
     const fileContent = Fixtures.get('parent/package.json');
     fs.readLocalFile
       .mockResolvedValueOnce(fileContent)
@@ -150,7 +150,7 @@ describe('modules/manager/npm/post-update/pnpm', () => {
 
   it('uses packageManager version and puts it into constraint', async () => {
     const execSnapshots = mockExecAll();
-    const configTemp = partial<PostUpdateConfig>({});
+    const configTemp = partial<PostUpdateConfig>();
     const fileContent = Fixtures.get('manager-field/package.json');
     fs.readLocalFile
       .mockResolvedValueOnce(fileContent)
@@ -192,7 +192,7 @@ describe('modules/manager/npm/post-update/pnpm', () => {
 
   it('uses skips pnpm v7 if lockfileVersion indicates <7', async () => {
     mockExecAll();
-    const configTemp = partial<PostUpdateConfig>({});
+    const configTemp = partial<PostUpdateConfig>();
     fs.readLocalFile
       .mockResolvedValueOnce('{}') // package.json
       .mockResolvedValue('lockfileVersion: 5.3\n'); // pnpm-lock.yaml
diff --git a/lib/modules/platform/gitea/index.spec.ts b/lib/modules/platform/gitea/index.spec.ts
index 8a27641c73037da2f32851b5d2de68ab4d9d2c85..060c7e57b111ef214516f859d970692840cead7e 100644
--- a/lib/modules/platform/gitea/index.spec.ts
+++ b/lib/modules/platform/gitea/index.spec.ts
@@ -1075,7 +1075,7 @@ describe('modules/platform/gitea/index', () => {
     });
 
     it('should abort when response for created pull request is invalid', async () => {
-      helper.createPR.mockResolvedValueOnce(partial<PR>({}));
+      helper.createPR.mockResolvedValueOnce(partial<PR>());
 
       await initFakeRepo();
       await expect(
@@ -1940,7 +1940,7 @@ describe('modules/platform/gitea/index', () => {
     });
 
     it('returns null on missing content', async () => {
-      helper.getRepoContents.mockResolvedValueOnce(partial<RepoContents>({}));
+      helper.getRepoContents.mockResolvedValueOnce(partial<RepoContents>());
       await initFakeRepo({ full_name: 'some/repo' });
       expect(await gitea.getJsonFile('file.json')).toBeNull();
     });
diff --git a/lib/modules/versioning/python/index.spec.ts b/lib/modules/versioning/python/index.spec.ts
index 7cd3b9edfa11fb77ab7949d19272b0524e4e2240..041a12605795ece31d1b3c9c6c0b863297d368a9 100644
--- a/lib/modules/versioning/python/index.spec.ts
+++ b/lib/modules/versioning/python/index.spec.ts
@@ -97,6 +97,6 @@ describe('modules/versioning/python/index', () => {
   );
 
   test('getNewValue()', () => {
-    expect(versioning.getNewValue(partial<NewValueConfig>({}))).toBeNull();
+    expect(versioning.getNewValue(partial<NewValueConfig>())).toBeNull();
   });
 });
diff --git a/lib/workers/repository/changelog/index.spec.ts b/lib/workers/repository/changelog/index.spec.ts
index ad2a87d84a8428b09f93edc227fcfc8fd4bd2929..5ad0dd54bf60c4f9fd86a61440d615a03b77c3f0 100644
--- a/lib/workers/repository/changelog/index.spec.ts
+++ b/lib/workers/repository/changelog/index.spec.ts
@@ -17,8 +17,8 @@ describe('workers/repository/changelog/index', () => {
     mockedFunction(getChangeLogJSON).mockResolvedValueOnce(null);
     const branches = [
       partial<BranchUpgradeConfig>({ logJSON: null }),
-      partial<BranchUpgradeConfig>({}),
-      partial<BranchUpgradeConfig>({}),
+      partial<BranchUpgradeConfig>(),
+      partial<BranchUpgradeConfig>(),
     ];
     await expect(embedChangelogs(branches)).toResolve();
     expect(branches).toEqual([
@@ -29,7 +29,7 @@ describe('workers/repository/changelog/index', () => {
   });
 
   it('needsChangelogs', () => {
-    expect(needsChangelogs(partial<BranchUpgradeConfig>({}))).toBeFalse();
+    expect(needsChangelogs(partial<BranchUpgradeConfig>())).toBeFalse();
     expect(
       needsChangelogs(
         partial<BranchUpgradeConfig>({
diff --git a/lib/workers/repository/config-migration/branch/create.spec.ts b/lib/workers/repository/config-migration/branch/create.spec.ts
index 820333110d73d8f287057be8e8e2ebd9d211a651..d1e450be9d8598d17fdaf14d6025582ebc55db47 100644
--- a/lib/workers/repository/config-migration/branch/create.spec.ts
+++ b/lib/workers/repository/config-migration/branch/create.spec.ts
@@ -29,7 +29,7 @@ describe('workers/repository/config-migration/branch/create', () => {
     migratedConfigData = {
       content: renovateConfig,
       filename,
-      indent: partial<Indent>({}),
+      indent: partial<Indent>(),
     };
     prettierSpy.mockResolvedValueOnce(migratedConfigData.content);
   });
diff --git a/lib/workers/repository/config-migration/branch/rebase.spec.ts b/lib/workers/repository/config-migration/branch/rebase.spec.ts
index 836ef9fda72bad3b58625e1342c9a5293eddcde8..1ac78e49ad33228d84eb7f5d1509f2b051ef548f 100644
--- a/lib/workers/repository/config-migration/branch/rebase.spec.ts
+++ b/lib/workers/repository/config-migration/branch/rebase.spec.ts
@@ -43,7 +43,7 @@ describe('workers/repository/config-migration/branch/rebase', () => {
     const migratedConfigData: MigratedData = {
       content: '',
       filename: '',
-      indent: partial<Indent>({}),
+      indent: partial<Indent>(),
     };
 
     beforeEach(() => {
diff --git a/lib/workers/repository/config-migration/index.spec.ts b/lib/workers/repository/config-migration/index.spec.ts
index f15f4bd75d5d7598d6e4a4a5db911fa9a8cd0d25..3ab683886d360cab8d85e30b391e0fc6253a83d8 100644
--- a/lib/workers/repository/config-migration/index.spec.ts
+++ b/lib/workers/repository/config-migration/index.spec.ts
@@ -24,7 +24,7 @@ describe('workers/repository/config-migration/index', () => {
     mockedFunction(MigratedDataFactory.getAsync).mockResolvedValue({
       filename,
       content,
-      indent: partial<Indent>({}),
+      indent: partial<Indent>(),
     });
   });
 
diff --git a/lib/workers/repository/config-migration/pr/index.spec.ts b/lib/workers/repository/config-migration/pr/index.spec.ts
index 10ca2b4c46ac5d7da328574e2ee4053fc916e2b1..e0dc57d32f908c56e3005cb99f330eb713925f95 100644
--- a/lib/workers/repository/config-migration/pr/index.spec.ts
+++ b/lib/workers/repository/config-migration/pr/index.spec.ts
@@ -29,7 +29,7 @@ describe('workers/repository/config-migration/pr/index', () => {
   const migratedData: MigratedData = {
     content: migratedContent,
     filename: configFileName,
-    indent: partial<Indent>({}),
+    indent: partial<Indent>(),
   };
   let config: RenovateConfig;
 
@@ -49,7 +49,7 @@ describe('workers/repository/config-migration/pr/index', () => {
   describe('ensureConfigMigrationPr()', () => {
     beforeEach(() => {
       spy.mockImplementation((input) => input);
-      platform.createPr.mockResolvedValueOnce(partial<Pr>({}));
+      platform.createPr.mockResolvedValueOnce(partial<Pr>());
     });
 
     let createPrBody: string;
@@ -166,7 +166,7 @@ describe('workers/repository/config-migration/pr/index', () => {
       await ensureConfigMigrationPr(config, {
         content: migratedContent,
         filename: 'renovate.json5',
-        indent: partial<Indent>({}),
+        indent: partial<Indent>(),
       });
       expect(platform.createPr).toHaveBeenCalledTimes(1);
       expect(platform.createPr.mock.calls[0][0].prBody).toMatchSnapshot();
diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts
index 527fa506a5c1bd0cb4f0006fdca8aac40ff1b8f7..10e1df6b8b6bb8057b2c3265880c72f033b46d42 100644
--- a/lib/workers/repository/init/vulnerability.spec.ts
+++ b/lib/workers/repository/init/vulnerability.spec.ts
@@ -48,7 +48,7 @@ describe('workers/repository/init/vulnerability', () => {
       // TODO #7154
       delete config.vulnerabilityAlerts!.enabled;
       platform.getVulnerabilityAlerts.mockResolvedValue([
-        partial<VulnerabilityAlert>({}),
+        partial<VulnerabilityAlert>(),
         {
           dismissReason: null,
           vulnerableManifestFilename: 'package-lock.json',
diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts
index 4ec902ae2f662f2543497907b891e22839a704c7..500a62d1e71ea03af00c61ddbb0d62ff3a27a8e3 100644
--- a/lib/workers/repository/onboarding/pr/index.spec.ts
+++ b/lib/workers/repository/onboarding/pr/index.spec.ts
@@ -39,7 +39,7 @@ describe('workers/repository/onboarding/pr/index', () => {
       packageFiles = { npm: [{ packageFile: 'package.json', deps: [] }] };
       branches = [];
       platform.massageMarkdown = jest.fn((input) => input);
-      platform.createPr.mockResolvedValueOnce(partial<Pr>({}));
+      platform.createPr.mockResolvedValueOnce(partial<Pr>());
       GlobalConfig.reset();
     });
 
diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts
index af3c6bae8b390a1c2023e0ac9ca184437a4a81c9..0f96102ee3fdcf2f732e9968377faab358dde119 100644
--- a/lib/workers/repository/process/write.spec.ts
+++ b/lib/workers/repository/process/write.spec.ts
@@ -307,7 +307,7 @@ describe('workers/repository/process/write', () => {
           ],
         },
       ];
-      const repoCacheObj = partial<RepoCacheData>({});
+      const repoCacheObj = partial<RepoCacheData>();
       repoCache.getCache.mockReturnValueOnce(repoCacheObj);
       branchWorker.processBranch.mockResolvedValueOnce({
         branchExists: true,
@@ -377,7 +377,7 @@ describe('workers/repository/process/write', () => {
 
   describe('syncBranchState()', () => {
     it('creates minimal branch state when cache is not populated', () => {
-      const repoCacheObj = partial<RepoCacheData>({});
+      const repoCacheObj = partial<RepoCacheData>();
       repoCache.getCache.mockReturnValue(repoCacheObj);
       scm.getBranchCommit.mockResolvedValueOnce('sha');
       scm.getBranchCommit.mockResolvedValueOnce('base_sha');
diff --git a/lib/workers/repository/update/branch/index.spec.ts b/lib/workers/repository/update/branch/index.spec.ts
index 7fdd1cbc22acda0a9777eda69569497a8f47b8a4..915f2ff92c4f287fcb970be5a55491281ba423ec 100644
--- a/lib/workers/repository/update/branch/index.spec.ts
+++ b/lib/workers/repository/update/branch/index.spec.ts
@@ -557,12 +557,12 @@ describe('workers/repository/update/branch/index', () => {
     it('returns if branch automerged', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -575,12 +575,12 @@ describe('workers/repository/update/branch/index', () => {
     it('returns if branch automerged and no checks', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(false);
       scm.getBranchCommit.mockResolvedValue('123test'); //TODO: not needed?
@@ -596,12 +596,12 @@ describe('workers/repository/update/branch/index', () => {
     it('returns if branch automerged (dry-run)', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -616,12 +616,12 @@ describe('workers/repository/update/branch/index', () => {
     it('returns if branch exists and prCreation set to approval', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -642,12 +642,12 @@ describe('workers/repository/update/branch/index', () => {
       expect.assertions(1);
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -668,12 +668,12 @@ describe('workers/repository/update/branch/index', () => {
       expect.assertions(1);
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -694,12 +694,12 @@ describe('workers/repository/update/branch/index', () => {
       expect.assertions(1);
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -720,12 +720,12 @@ describe('workers/repository/update/branch/index', () => {
       expect.assertions(1);
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -746,12 +746,12 @@ describe('workers/repository/update/branch/index', () => {
       expect.assertions(3);
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       const inconfig = {
         ...config,
@@ -777,18 +777,18 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR and tries automerge', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -801,18 +801,18 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR when impossible to automerge', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('stale');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: false });
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -828,7 +828,7 @@ describe('workers/repository/update/branch/index', () => {
 
     it('skips when automerge is off schedule', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
-        partial<PackageFilesResult>({})
+        partial<PackageFilesResult>()
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce(
         partial<WriteExistingFilesResult>({
@@ -864,18 +864,18 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR and adds lock file error comment if no releaseTimestamp', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -888,18 +888,18 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR and adds lock file error comment if old releaseTimestamp', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       config.releaseTimestamp = '2018-04-26T05:15:51.877Z';
@@ -913,18 +913,18 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR and adds lock file error comment if new releaseTimestamp and branch exists', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       config.releaseTimestamp = new Date().toISOString();
@@ -938,18 +938,18 @@ describe('workers/repository/update/branch/index', () => {
     it('throws error if lock file errors and new releaseTimestamp', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(false);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       config.releaseTimestamp = new Date().toISOString();
@@ -961,19 +961,19 @@ describe('workers/repository/update/branch/index', () => {
     it('ensures PR and adds lock file error comment recreate closed', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       config.recreateClosed = true;
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       prAutomerge.checkAutoMerge.mockResolvedValueOnce({ automerged: true });
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
@@ -999,12 +999,12 @@ describe('workers/repository/update/branch/index', () => {
     it('throws and swallows branch errors', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
-        artifactErrors: [partial<ArtifactError>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        artifactErrors: [partial<ArtifactError>()],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.getBranchCommit.mockResolvedValue('123test'); //TODO:not needed?
       const processBranchResult = await branchWorker.processBranch(config);
@@ -1020,12 +1020,12 @@ describe('workers/repository/update/branch/index', () => {
     it('swallows pr errors', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       automerge.tryBranchAutomerge.mockResolvedValueOnce('failed');
@@ -1089,13 +1089,13 @@ describe('workers/repository/update/branch/index', () => {
         },
       });
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
-        updatedPackageFiles: [partial<FileChange>({})],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedPackageFiles: [partial<FileChange>()],
+        updatedArtifacts: [partial<FileChange>()],
         artifactErrors: [{}],
       });
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(pr);
@@ -1130,7 +1130,7 @@ describe('workers/repository/update/branch/index', () => {
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -1147,7 +1147,7 @@ describe('workers/repository/update/branch/index', () => {
       schedule.isScheduledNow.mockReturnValueOnce(false);
       prWorker.ensurePr.mockResolvedValueOnce({
         type: 'with-pr',
-        pr: partial<Pr>({}),
+        pr: partial<Pr>(),
       });
       commit.commitFilesToBranch.mockResolvedValueOnce(null);
       GlobalConfig.set({ ...adminConfig, dryRun: 'full' });
@@ -1171,14 +1171,14 @@ describe('workers/repository/update/branch/index', () => {
     it('branch pr no schedule', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [],
           updatedArtifacts: [],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -1212,14 +1212,14 @@ describe('workers/repository/update/branch/index', () => {
     it('skips branch update if stopUpdatingLabel presents', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [],
           updatedArtifacts: [],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -1276,14 +1276,14 @@ describe('workers/repository/update/branch/index', () => {
     it('updates branch if stopUpdatingLabel presents and PR rebase/retry box checked', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [],
           updatedArtifacts: [],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -1318,14 +1318,14 @@ describe('workers/repository/update/branch/index', () => {
     it('updates branch if stopUpdatingLabel presents and dependency dashboard box checked', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [],
           updatedArtifacts: [],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -2020,13 +2020,13 @@ describe('workers/repository/update/branch/index', () => {
     it('Dependency Dashboard All Pending approval', async () => {
       jest.spyOn(getUpdated, 'getUpdatedPackageFiles').mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [{}],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -2057,13 +2057,13 @@ describe('workers/repository/update/branch/index', () => {
     it('Dependency Dashboard open all rate-limited', async () => {
       jest.spyOn(getUpdated, 'getUpdatedPackageFiles').mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [{}],
         })
       );
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       scm.branchExists.mockResolvedValue(true);
       platform.getBranchPr.mockResolvedValueOnce(
@@ -2094,7 +2094,7 @@ describe('workers/repository/update/branch/index', () => {
     it('continues branch, skips automerge if there are artifact errors', async () => {
       jest.spyOn(getUpdated, 'getUpdatedPackageFiles').mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
           artifactErrors: [{}],
         })
       );
@@ -2124,7 +2124,7 @@ describe('workers/repository/update/branch/index', () => {
       scm.getBranchCommit.mockResolvedValueOnce('123test');
       npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
         artifactErrors: [],
-        updatedArtifacts: [partial<FileChange>({})],
+        updatedArtifacts: [partial<FileChange>()],
       });
       platform.getBranchPr.mockResolvedValueOnce(
         partial<Pr>({
@@ -2133,7 +2133,7 @@ describe('workers/repository/update/branch/index', () => {
       );
       jest.spyOn(getUpdated, 'getUpdatedPackageFiles').mockResolvedValueOnce(
         partial<PackageFilesResult>({
-          updatedPackageFiles: [partial<FileChange>({})],
+          updatedPackageFiles: [partial<FileChange>()],
         })
       );
       const inconfig = {
diff --git a/lib/workers/repository/update/pr/automerge.spec.ts b/lib/workers/repository/update/pr/automerge.spec.ts
index 720c06638a55d2dd0fceb9f2353d24863d386a12..dfe4913afb47700313793d16a0ef5a5c01bb1647 100644
--- a/lib/workers/repository/update/pr/automerge.spec.ts
+++ b/lib/workers/repository/update/pr/automerge.spec.ts
@@ -16,7 +16,7 @@ describe('workers/repository/update/pr/automerge', () => {
       config = {
         ...getConfig(),
       } as BranchConfig;
-      pr = partial<Pr>({});
+      pr = partial<Pr>();
     });
 
     it('should not automerge if not configured', async () => {
diff --git a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
index 11037405065cc169ebe42521669b287d0a6fbcbe..25ccfaccf02142042fd264b8363bb3eb1eae07d2 100644
--- a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
+++ b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
@@ -174,8 +174,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
   describe('getReleaseList()', () => {
     it('should return empty array if no apiBaseUrl', async () => {
       const res = await getReleaseList(
-        partial<ChangeLogProject>({}),
-        partial<ChangeLogRelease>({})
+        partial<ChangeLogProject>(),
+        partial<ChangeLogRelease>()
       );
       expect(res).toBeEmptyArray();
     });
@@ -205,7 +205,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
           ...githubProject,
           repository: 'some/yet-other-repository',
         },
-        partial<ChangeLogRelease>({})
+        partial<ChangeLogRelease>()
       );
       expect(res).toMatchObject([
         {
@@ -240,7 +240,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
           ...gitlabProject,
           repository: 'some/yet-other-repository',
         },
-        partial<ChangeLogRelease>({})
+        partial<ChangeLogRelease>()
       );
       expect(res).toMatchObject([
         {
@@ -279,7 +279,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
           apiBaseUrl: 'https://my.custom.domain/api/v4/',
           baseUrl: 'https://my.custom.domain/',
         },
-        partial<ChangeLogRelease>({})
+        partial<ChangeLogRelease>()
       );
       expect(res).toMatchObject([
         {
@@ -833,7 +833,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
           version: '1.0.1',
           gitRef: '1.0.1',
         }),
-        partial<BranchUpgradeConfig>({})
+        partial<BranchUpgradeConfig>()
       );
       expect(res).toBeNull();
     });
diff --git a/test/util.ts b/test/util.ts
index df65067d0b41283d0fe0d69b17e83839026faece..369a08f4ec1fbe0f0fb15bbd1db6deff18652b0f 100644
--- a/test/util.ts
+++ b/test/util.ts
@@ -35,9 +35,10 @@ export function mockedFunction<T extends (...args: any[]) => any>(
  * Simply wrapper to create partial mocks.
  * @param obj Object to cast to final type
  */
+export function partial<T>(): T;
 export function partial<T>(obj: Partial<T>): T;
 export function partial<T>(obj: Partial<T>[]): T[];
-export function partial(obj: unknown): unknown {
+export function partial(obj: unknown = {}): unknown {
   return obj;
 }