@@ -582,3 +582,108 @@ function switchResponseWrong(x: unknown): SomeResponse {
582582>x : Symbol(x, Decl(unknownType2.ts, 210, 29))
583583}
584584
585+ // Repro from #33483
586+
587+ function f2(x: unknown): string | undefined {
588+ >f2 : Symbol(f2, Decl(unknownType2.ts, 221, 1))
589+ >x : Symbol(x, Decl(unknownType2.ts, 225, 12))
590+
591+ if (x !== undefined && typeof x !== 'string') {
592+ >x : Symbol(x, Decl(unknownType2.ts, 225, 12))
593+ >undefined : Symbol(undefined)
594+ >x : Symbol(x, Decl(unknownType2.ts, 225, 12))
595+
596+ throw new Error();
597+ >Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
598+ }
599+ return x;
600+ >x : Symbol(x, Decl(unknownType2.ts, 225, 12))
601+ }
602+
603+ function notNotEquals(u: unknown) {
604+ >notNotEquals : Symbol(notNotEquals, Decl(unknownType2.ts, 230, 1))
605+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
606+
607+ if (u !== NumberEnum) { }
608+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
609+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
610+
611+ else {
612+ const o: object = u;
613+ >o : Symbol(o, Decl(unknownType2.ts, 235, 13))
614+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
615+ }
616+
617+ if (u !== NumberEnum.A) { }
618+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
619+ >NumberEnum.A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
620+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
621+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
622+
623+ else {
624+ const a: NumberEnum.A = u;
625+ >a : Symbol(a, Decl(unknownType2.ts, 240, 13))
626+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
627+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
628+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
629+ }
630+
631+
632+ if (u !== NumberEnum.A && u !== NumberEnum.B && u !== StringEnum.A) { }
633+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
634+ >NumberEnum.A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
635+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
636+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
637+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
638+ >NumberEnum.B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
639+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
640+ >B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
641+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
642+ >StringEnum.A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
643+ >StringEnum : Symbol(StringEnum, Decl(unknownType2.ts, 96, 1))
644+ >A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
645+
646+ else {
647+ const aOrB: NumberEnum.A | NumberEnum.B | StringEnum.A = u;
648+ >aOrB : Symbol(aOrB, Decl(unknownType2.ts, 246, 13))
649+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
650+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
651+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
652+ >B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
653+ >StringEnum : Symbol(StringEnum, Decl(unknownType2.ts, 96, 1))
654+ >A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
655+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
656+ }
657+
658+ // equivalent to
659+ if (!(u === NumberEnum.A || u === NumberEnum.B || u === StringEnum.A)) { }
660+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
661+ >NumberEnum.A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
662+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
663+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
664+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
665+ >NumberEnum.B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
666+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
667+ >B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
668+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
669+ >StringEnum.A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
670+ >StringEnum : Symbol(StringEnum, Decl(unknownType2.ts, 96, 1))
671+ >A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
672+
673+ else {
674+ const aOrB: NumberEnum.A | NumberEnum.B | StringEnum.A = u;
675+ >aOrB : Symbol(aOrB, Decl(unknownType2.ts, 252, 13))
676+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
677+ >A : Symbol(NumberEnum.A, Decl(unknownType2.ts, 92, 17))
678+ >NumberEnum : Symbol(NumberEnum, Decl(unknownType2.ts, 90, 1))
679+ >B : Symbol(NumberEnum.B, Decl(unknownType2.ts, 93, 6))
680+ >StringEnum : Symbol(StringEnum, Decl(unknownType2.ts, 96, 1))
681+ >A : Symbol(StringEnum.A, Decl(unknownType2.ts, 98, 17))
682+ >u : Symbol(u, Decl(unknownType2.ts, 232, 22))
683+ }
684+ }
685+
686+
687+
688+
689+
0 commit comments