From b05785135da554633699201e9958ada0a6813bec Mon Sep 17 00:00:00 2001 From: Elena Shcherbakova <52835185+not-a-doctor@users.noreply.github.com> Date: Tue, 14 Jul 2020 19:08:18 +0300 Subject: [PATCH] chore: update type definitions for coverageReporters; --- CHANGELOG.md | 1 + docs/Configuration.md | 2 +- packages/jest-types/src/Config.ts | 20 +++++++++++++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bc2c8d7bb91..4403dd5b3d99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - `[jest-jasmine2]` Remove usage of `Function` type ([#10216](https://github.com/facebook/jest/pull/10216)) - `[jest-resolve]` Improve types ([#10239](https://github.com/facebook/jest/pull/10239)) - `[docs]` Clarify the [`jest.requireActual(moduleName)`](https://jestjs.io/docs/en/jest-object#jestrequireactualmodulename) example +- `[jest-types]` Refine typings of `coverageReporters` ([#10275](https://github.com/facebook/jest/pull/10275)) ### Performance diff --git a/docs/Configuration.md b/docs/Configuration.md index e37973c2c394..7b7e4a33be83 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -193,7 +193,7 @@ Indicates which provider should be used to instrument code for coverage. Allowed Note that using `v8` is considered experimental. This uses V8's builtin code coverage rather than one based on Babel. It is not as well tested, and it has also improved in the last few releases of Node. Using the latest versions of node (v14 at the time of this writing) will yield better results. -### `coverageReporters` [array\] +### `coverageReporters` [CoverageReporters] Default: `["json", "lcov", "text", "clover"]` diff --git a/packages/jest-types/src/Config.ts b/packages/jest-types/src/Config.ts index 76a7b33a8f77..8d7972e0c482 100644 --- a/packages/jest-types/src/Config.ts +++ b/packages/jest-types/src/Config.ts @@ -23,6 +23,20 @@ export type HasteConfig = { throwOnModuleCollision?: boolean; }; +export type CoverageReporterName = keyof ReportOptions; + +export type CoverageReporterWithOptions< + K = CoverageReporterName +> = K extends CoverageReporterName + ? ReportOptions[K] extends never + ? never + : [K, Partial] + : never; + +export type CoverageReporters = Array< + CoverageReporterName | CoverageReporterWithOptions +>; + export type ReporterConfig = [string, Record]; export type TransformerConfig = [string, Record]; @@ -39,7 +53,7 @@ export type DefaultOptions = { clearMocks: boolean; collectCoverage: boolean; coveragePathIgnorePatterns: Array; - coverageReporters: Array; + coverageReporters: Array; coverageProvider: CoverageProvider; errorOnDeprecated: boolean; expand: boolean; @@ -108,7 +122,7 @@ export type InitialOptions = Partial<{ coverageDirectory: string; coveragePathIgnorePatterns: Array; coverageProvider: CoverageProvider; - coverageReporters: Array; + coverageReporters: CoverageReporters; coverageThreshold: { global: { [key: string]: number; @@ -238,7 +252,7 @@ export type GlobalConfig = { coverageDirectory: string; coveragePathIgnorePatterns?: Array; coverageProvider: CoverageProvider; - coverageReporters: Array; + coverageReporters: CoverageReporters; coverageThreshold?: CoverageThreshold; detectLeaks: boolean; detectOpenHandles: boolean;