From bc517c1176f989a637ffc2c13e4aba87e8588df6 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 | 4 +++- packages/jest-types/src/Config.ts | 20 +++++++++++++++++--- 3 files changed, 21 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..33b21244868a 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` [array\] Default: `["json", "lcov", "text", "clover"]` @@ -207,6 +207,8 @@ _Note: You can pass additional options to the istanbul reporter using the tuple ["json", ["lcov", {"projectRoot": "../../"}]] ``` +For the additional information about the options object shape you can refer to CoverageReporterWithOptions type in the [type definitions](https://github.com/facebook/jest/tree/master/packages/jest-types/src/Config.ts) + ### `coverageThreshold` [object] Default: `undefined` 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;