From 97456dfcf66e945f643a7511f81a4f2a71c8ea96 Mon Sep 17 00:00:00 2001 From: Ahmed Tarek Date: Sun, 27 Feb 2022 01:21:33 +0200 Subject: [PATCH] fix: types for Cypress.Commands.add (#20376) --- cli/types/cypress.d.ts | 7 ++++--- cli/types/tests/cypress-tests.ts | 14 +++++++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/cli/types/cypress.d.ts b/cli/types/cypress.d.ts index 048b93ba50e0..40dac2e60008 100644 --- a/cli/types/cypress.d.ts +++ b/cli/types/cypress.d.ts @@ -10,10 +10,10 @@ declare namespace Cypress { type PrevSubject = keyof PrevSubjectMap type TestingType = 'e2e' | 'component' type PluginConfig = (on: PluginEvents, config: PluginConfigOptions) => void | ConfigOptions | Promise - + type JQuerySelector = JQuery & { selector: string } interface PrevSubjectMap { optional: O - element: JQuery + element: JQuerySelector document: Document window: Window } @@ -461,8 +461,9 @@ declare namespace Cypress { Commands: { add(name: T, fn: CommandFn): void add(name: T, options: CommandOptions & {prevSubject: false}, fn: CommandFn): void + add(name: T, options: CommandOptions & {prevSubject: true}, fn: CommandFnWithSubject): void add( - name: T, options: CommandOptions & { prevSubject: true | S | ['optional'] }, fn: CommandFnWithSubject, + name: T, options: CommandOptions & { prevSubject: S | ['optional'] }, fn: CommandFnWithSubject, ): void add( name: T, options: CommandOptions & { prevSubject: S[] }, fn: CommandFnWithSubject[S]>, diff --git a/cli/types/tests/cypress-tests.ts b/cli/types/tests/cypress-tests.ts index ca80e00d71a4..a9175d9405ea 100644 --- a/cli/types/tests/cypress-tests.ts +++ b/cli/types/tests/cypress-tests.ts @@ -83,7 +83,8 @@ namespace CypressCommandsTests { arg // $ExpectType string }) Cypress.Commands.add('newCommand', { prevSubject: true }, (subject, arg) => { - subject // $ExpectType unknown + subject // $ExpectType JQuerySelector + subject.selector // $ExpectType string arg // $ExpectType string return }) @@ -113,11 +114,13 @@ namespace CypressCommandsTests { arg // $ExpectType string }) Cypress.Commands.add('newCommand', { prevSubject: 'element' }, (subject, arg) => { - subject // $ExpectType JQuery + subject // $ExpectType JQuerySelector + subject.selector // $ExpectType string arg // $ExpectType string }) Cypress.Commands.add('newCommand', { prevSubject: ['element'] }, (subject, arg) => { - subject // $ExpectType JQuery + subject // $ExpectType JQuerySelector + subject.selector // $ExpectType string arg // $ExpectType string }) Cypress.Commands.add('newCommand', { prevSubject: ['element', 'document', 'window'] }, (subject, arg) => { @@ -126,7 +129,8 @@ namespace CypressCommandsTests { } else if (subject instanceof Document) { subject // $ExpectType Document } else { - subject // $ExpectType JQuery + subject // $ExpectType JQuerySelector + subject.selector // $ExpectType string } arg // $ExpectType string }) @@ -136,7 +140,7 @@ namespace CypressCommandsTests { } else if (subject instanceof Document) { subject // $ExpectType Document } else if (subject) { - subject // $ExpectType JQuery + subject // $ExpectType JQuerySelector } else { subject // $ExpectType void }