@@ -476,3 +476,123 @@ async function brokenExample<AcceptableKeyType extends string = string>(structur
476
476
>structure : Symbol(structure, Decl(awaitedType.ts, 182, 7))
477
477
>key : Symbol(key, Decl(awaitedType.ts, 181, 135))
478
478
}
479
+
480
+ // repro from #46543
481
+
482
+ type SelectAndInclude = {
483
+ >SelectAndInclude : Symbol(SelectAndInclude, Decl(awaitedType.ts, 184, 1))
484
+
485
+ select: any;
486
+ >select : Symbol(select, Decl(awaitedType.ts, 188, 25))
487
+
488
+ include: any;
489
+ >include : Symbol(include, Decl(awaitedType.ts, 189, 14))
490
+
491
+ };
492
+ type HasSelect = {
493
+ >HasSelect : Symbol(HasSelect, Decl(awaitedType.ts, 191, 2))
494
+
495
+ select: any;
496
+ >select : Symbol(select, Decl(awaitedType.ts, 192, 18))
497
+
498
+ };
499
+ type HasInclude = {
500
+ >HasInclude : Symbol(HasInclude, Decl(awaitedType.ts, 194, 2))
501
+
502
+ include: any;
503
+ >include : Symbol(include, Decl(awaitedType.ts, 195, 19))
504
+
505
+ };
506
+
507
+ type CheckSelect<T, S, U> = T extends SelectAndInclude
508
+ >CheckSelect : Symbol(CheckSelect, Decl(awaitedType.ts, 197, 2))
509
+ >T : Symbol(T, Decl(awaitedType.ts, 199, 17))
510
+ >S : Symbol(S, Decl(awaitedType.ts, 199, 19))
511
+ >U : Symbol(U, Decl(awaitedType.ts, 199, 22))
512
+ >T : Symbol(T, Decl(awaitedType.ts, 199, 17))
513
+ >SelectAndInclude : Symbol(SelectAndInclude, Decl(awaitedType.ts, 184, 1))
514
+
515
+ ? "Please either choose `select` or `include`"
516
+ : T extends HasSelect
517
+ >T : Symbol(T, Decl(awaitedType.ts, 199, 17))
518
+ >HasSelect : Symbol(HasSelect, Decl(awaitedType.ts, 191, 2))
519
+
520
+ ? U
521
+ >U : Symbol(U, Decl(awaitedType.ts, 199, 22))
522
+
523
+ : T extends HasInclude
524
+ >T : Symbol(T, Decl(awaitedType.ts, 199, 17))
525
+ >HasInclude : Symbol(HasInclude, Decl(awaitedType.ts, 194, 2))
526
+
527
+ ? U
528
+ >U : Symbol(U, Decl(awaitedType.ts, 199, 22))
529
+
530
+ : S;
531
+ >S : Symbol(S, Decl(awaitedType.ts, 199, 19))
532
+
533
+ declare function findMany<T extends { select?: string; include?: string }>(
534
+ >findMany : Symbol(findMany, Decl(awaitedType.ts, 205, 6))
535
+ >T : Symbol(T, Decl(awaitedType.ts, 207, 26))
536
+ >select : Symbol(select, Decl(awaitedType.ts, 207, 37))
537
+ >include : Symbol(include, Decl(awaitedType.ts, 207, 54))
538
+
539
+ args: T
540
+ >args : Symbol(args, Decl(awaitedType.ts, 207, 75))
541
+ >T : Symbol(T, Decl(awaitedType.ts, 207, 26))
542
+
543
+ ): CheckSelect<T, Promise<1>, Promise<2>>;
544
+ >CheckSelect : Symbol(CheckSelect, Decl(awaitedType.ts, 197, 2))
545
+ >T : Symbol(T, Decl(awaitedType.ts, 207, 26))
546
+ >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
547
+ >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
548
+
549
+ async function findManyWrapper<
550
+ >findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
551
+
552
+ T extends { select?: string; include?: string }
553
+ >T : Symbol(T, Decl(awaitedType.ts, 211, 31))
554
+ >select : Symbol(select, Decl(awaitedType.ts, 212, 13))
555
+ >include : Symbol(include, Decl(awaitedType.ts, 212, 30))
556
+
557
+ >(args: T) {
558
+ >args : Symbol(args, Decl(awaitedType.ts, 213, 2))
559
+ >T : Symbol(T, Decl(awaitedType.ts, 211, 31))
560
+
561
+ const result = await findMany(args);
562
+ >result : Symbol(result, Decl(awaitedType.ts, 214, 7))
563
+ >findMany : Symbol(findMany, Decl(awaitedType.ts, 205, 6))
564
+ >args : Symbol(args, Decl(awaitedType.ts, 213, 2))
565
+
566
+ return result;
567
+ >result : Symbol(result, Decl(awaitedType.ts, 214, 7))
568
+ }
569
+
570
+ async function mainFindMany() {
571
+ >mainFindMany : Symbol(mainFindMany, Decl(awaitedType.ts, 216, 1))
572
+
573
+ const shouldBeErrorText = await findManyWrapper({
574
+ >shouldBeErrorText : Symbol(shouldBeErrorText, Decl(awaitedType.ts, 219, 7))
575
+ >findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
576
+
577
+ select: "foo",
578
+ >select : Symbol(select, Decl(awaitedType.ts, 219, 51))
579
+
580
+ include: "bar",
581
+ >include : Symbol(include, Decl(awaitedType.ts, 220, 18))
582
+
583
+ });
584
+ const itsOne = await findManyWrapper({});
585
+ >itsOne : Symbol(itsOne, Decl(awaitedType.ts, 223, 7))
586
+ >findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
587
+
588
+ const itsTwo1 = await findManyWrapper({ select: "foo" });
589
+ >itsTwo1 : Symbol(itsTwo1, Decl(awaitedType.ts, 224, 7))
590
+ >findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
591
+ >select : Symbol(select, Decl(awaitedType.ts, 224, 41))
592
+
593
+ const itsTwo2 = await findManyWrapper({ include: "bar" });
594
+ >itsTwo2 : Symbol(itsTwo2, Decl(awaitedType.ts, 225, 7))
595
+ >findManyWrapper : Symbol(findManyWrapper, Decl(awaitedType.ts, 209, 42))
596
+ >include : Symbol(include, Decl(awaitedType.ts, 225, 41))
597
+ }
598
+
0 commit comments