Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 342bc06

Browse files
atarek12emilyrohrboughRacheltbiethman
authored
fix: prevObject types (cypress-io#21106)
Co-authored-by: Emily Rohrbough <[email protected]> Co-authored-by: Rachel <[email protected]> Co-authored-by: Tyler Biethman <[email protected]>
1 parent 55e7f8a commit 342bc06

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

cli/types/cypress.d.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ declare namespace Cypress {
1010
type PrevSubject = keyof PrevSubjectMap
1111
type TestingType = 'e2e' | 'component'
1212
type PluginConfig = (on: PluginEvents, config: PluginConfigOptions) => void | ConfigOptions | Promise<ConfigOptions>
13+
interface JQueryWithSelector<TElement = HTMLElement> extends JQuery<TElement> {
14+
selector?: string | null
15+
}
1316

1417
interface PrevSubjectMap<O = unknown> {
1518
optional: O
16-
element: JQuery
19+
element: JQueryWithSelector
1720
document: Document
1821
window: Window
1922
}
@@ -467,16 +470,18 @@ declare namespace Cypress {
467470
Commands: {
468471
add<T extends keyof Chainable>(name: T, fn: CommandFn<T>): void
469472
add<T extends keyof Chainable>(name: T, options: CommandOptions & {prevSubject: false}, fn: CommandFn<T>): void
473+
add<T extends keyof Chainable, S = any>(name: T, options: CommandOptions & {prevSubject: true}, fn: CommandFnWithSubject<T, S>): void
470474
add<T extends keyof Chainable, S extends PrevSubject>(
471-
name: T, options: CommandOptions & { prevSubject: true | S | ['optional'] }, fn: CommandFnWithSubject<T, PrevSubjectMap[S]>,
475+
name: T, options: CommandOptions & { prevSubject: S | ['optional'] }, fn: CommandFnWithSubject<T, PrevSubjectMap[S]>,
472476
): void
473477
add<T extends keyof Chainable, S extends PrevSubject>(
474478
name: T, options: CommandOptions & { prevSubject: S[] }, fn: CommandFnWithSubject<T, PrevSubjectMap<void>[S]>,
475479
): void
476480
addAll<T extends keyof Chainable>(fns: CommandFns): void
477481
addAll<T extends keyof Chainable>(options: CommandOptions & {prevSubject: false}, fns: CommandFns): void
482+
addAll<T extends keyof Chainable, S = any>(options: CommandOptions & { prevSubject: true }, fns: CommandFnsWithSubject<S>): void
478483
addAll<T extends keyof Chainable, S extends PrevSubject>(
479-
options: CommandOptions & { prevSubject: true | S | ['optional'] }, fns: CommandFnsWithSubject<PrevSubjectMap[S]>,
484+
options: CommandOptions & { prevSubject: S | ['optional'] }, fns: CommandFnsWithSubject<PrevSubjectMap[S]>,
480485
): void
481486
addAll<T extends keyof Chainable, S extends PrevSubject>(
482487
options: CommandOptions & { prevSubject: S[] }, fns: CommandFnsWithSubject<PrevSubjectMap<void>[S]>,

cli/types/tests/cypress-tests.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ namespace CypressCommandsTests {
8383
arg // $ExpectType string
8484
})
8585
Cypress.Commands.add('newCommand', { prevSubject: true }, (subject, arg) => {
86-
subject // $ExpectType unknown
86+
subject // $ExpectType any
8787
arg // $ExpectType string
8888
return
8989
})
@@ -113,11 +113,11 @@ namespace CypressCommandsTests {
113113
arg // $ExpectType string
114114
})
115115
Cypress.Commands.add('newCommand', { prevSubject: 'element' }, (subject, arg) => {
116-
subject // $ExpectType JQuery<HTMLElement>
116+
subject // $ExpectType JQueryWithSelector<HTMLElement>
117117
arg // $ExpectType string
118118
})
119119
Cypress.Commands.add('newCommand', { prevSubject: ['element'] }, (subject, arg) => {
120-
subject // $ExpectType JQuery<HTMLElement>
120+
subject // $ExpectType JQueryWithSelector<HTMLElement>
121121
arg // $ExpectType string
122122
})
123123
Cypress.Commands.add('newCommand', { prevSubject: ['element', 'document', 'window'] }, (subject, arg) => {
@@ -126,7 +126,7 @@ namespace CypressCommandsTests {
126126
} else if (subject instanceof Document) {
127127
subject // $ExpectType Document
128128
} else {
129-
subject // $ExpectType JQuery<HTMLElement>
129+
subject // $ExpectType JQueryWithSelector<HTMLElement>
130130
}
131131
arg // $ExpectType string
132132
})
@@ -136,7 +136,7 @@ namespace CypressCommandsTests {
136136
} else if (subject instanceof Document) {
137137
subject // $ExpectType Document
138138
} else if (subject) {
139-
subject // $ExpectType JQuery<HTMLElement>
139+
subject // $ExpectType JQueryWithSelector<HTMLElement>
140140
} else {
141141
subject // $ExpectType void
142142
}
@@ -173,7 +173,7 @@ namespace CypressCommandsTests {
173173
})
174174
Cypress.Commands.addAll({ prevSubject: true }, {
175175
newCommand: (subject, arg) => {
176-
subject // $ExpectType unknown
176+
subject // $ExpectType any
177177
arg // $ExpectType any
178178
return
179179
},
@@ -215,13 +215,13 @@ namespace CypressCommandsTests {
215215
})
216216
Cypress.Commands.addAll({ prevSubject: 'element' }, {
217217
newCommand: (subject, arg) => {
218-
subject // $ExpectType JQuery<HTMLElement>
218+
subject // $ExpectType JQueryWithSelector<HTMLElement>
219219
arg // $ExpectType any
220220
}
221221
})
222222
Cypress.Commands.addAll({ prevSubject: ['element'] }, {
223223
newCommand: (subject, arg) => {
224-
subject // $ExpectType JQuery<HTMLElement>
224+
subject // $ExpectType JQueryWithSelector<HTMLElement>
225225
arg // $ExpectType any
226226
}
227227
})
@@ -232,7 +232,7 @@ namespace CypressCommandsTests {
232232
} else if (subject instanceof Document) {
233233
subject // $ExpectType Document
234234
} else {
235-
subject // $ExpectType JQuery<HTMLElement>
235+
subject // $ExpectType JQueryWithSelector<HTMLElement>
236236
}
237237
arg // $ExpectType any
238238
}
@@ -244,7 +244,7 @@ namespace CypressCommandsTests {
244244
} else if (subject instanceof Document) {
245245
subject // $ExpectType Document
246246
} else if (subject) {
247-
subject // $ExpectType JQuery<HTMLElement>
247+
subject // $ExpectType JQueryWithSelector<HTMLElement>
248248
} else {
249249
subject // $ExpectType void
250250
}
@@ -271,7 +271,7 @@ namespace CypressCommandsTests {
271271
originalFn.apply(this, [arg]) // $ExpectType Chainable<number>
272272
})
273273
Cypress.Commands.overwrite<'type', 'element'>('type', (originalFn, element, text, options?: Partial<Cypress.TypeOptions & {sensitive: boolean}>) => {
274-
element // $ExpectType JQuery<HTMLElement>
274+
element // $ExpectType JQueryWithSelector<HTMLElement>
275275
text // $ExpectType string
276276

277277
if (options && options.sensitive) {

0 commit comments

Comments
 (0)