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;