@@ -215,7 +215,7 @@ export type Candidate =
215
215
raw : string
216
216
}
217
217
218
- export function cloneCandidate ( candidate : Candidate ) : Candidate {
218
+ export function cloneCandidate < T extends Candidate > ( candidate : T ) : T {
219
219
switch ( candidate . kind ) {
220
220
case 'arbitrary' :
221
221
return {
@@ -228,7 +228,7 @@ export function cloneCandidate(candidate: Candidate): Candidate {
228
228
variants : candidate . variants . map ( cloneVariant ) ,
229
229
important : candidate . important ,
230
230
raw : candidate . raw ,
231
- }
231
+ } satisfies Extract < Candidate , { kind : 'arbitrary' } > as T
232
232
233
233
case 'static' :
234
234
return {
@@ -237,7 +237,7 @@ export function cloneCandidate(candidate: Candidate): Candidate {
237
237
variants : candidate . variants . map ( cloneVariant ) ,
238
238
important : candidate . important ,
239
239
raw : candidate . raw ,
240
- }
240
+ } satisfies Extract < Candidate , { kind : 'static' } > as T
241
241
242
242
case 'functional' :
243
243
return {
@@ -262,21 +262,28 @@ export function cloneCandidate(candidate: Candidate): Candidate {
262
262
variants : candidate . variants . map ( cloneVariant ) ,
263
263
important : candidate . important ,
264
264
raw : candidate . raw ,
265
- }
265
+ } satisfies Extract < Candidate , { kind : 'functional' } > as T
266
266
267
267
default :
268
268
candidate satisfies never
269
269
throw new Error ( 'Unknown candidate kind' )
270
270
}
271
271
}
272
272
273
- export function cloneVariant ( variant : Variant ) : Variant {
273
+ export function cloneVariant < T extends Variant > ( variant : T ) : T {
274
274
switch ( variant . kind ) {
275
275
case 'arbitrary' :
276
- return { kind : variant . kind , selector : variant . selector , relative : variant . relative }
276
+ return {
277
+ kind : variant . kind ,
278
+ selector : variant . selector ,
279
+ relative : variant . relative ,
280
+ } satisfies Extract < Variant , { kind : 'arbitrary' } > as T
277
281
278
282
case 'static' :
279
- return { kind : variant . kind , root : variant . root }
283
+ return { kind : variant . kind , root : variant . root } satisfies Extract <
284
+ Variant ,
285
+ { kind : 'static' }
286
+ > as T
280
287
281
288
case 'functional' :
282
289
return {
@@ -286,7 +293,7 @@ export function cloneVariant(variant: Variant): Variant {
286
293
modifier : variant . modifier
287
294
? { kind : variant . modifier . kind , value : variant . modifier . value }
288
295
: null ,
289
- }
296
+ } satisfies Extract < Variant , { kind : 'functional' } > as T
290
297
291
298
case 'compound' :
292
299
return {
@@ -296,7 +303,7 @@ export function cloneVariant(variant: Variant): Variant {
296
303
modifier : variant . modifier
297
304
? { kind : variant . modifier . kind , value : variant . modifier . value }
298
305
: null ,
299
- }
306
+ } satisfies Extract < Variant , { kind : 'compound' } > as T
300
307
301
308
default :
302
309
variant satisfies never
0 commit comments