@@ -319,6 +319,20 @@ function f90<T extends S2, K extends keyof S2>(x1: S2[keyof S2], x2: T[keyof S2]
319
319
x4 . length ;
320
320
}
321
321
322
+ function f91< T , K extends keyof T > (x: T, y: T[keyof T], z: T[K]) {
323
+ let a : { } ;
324
+ a = x;
325
+ a = y;
326
+ a = z;
327
+ }
328
+
329
+ function f92 < T , K extends keyof T > (x: T, y: T[keyof T], z: T[K]) {
330
+ let a : { } | null | undefined;
331
+ a = x;
332
+ a = y;
333
+ a = z;
334
+ }
335
+
322
336
// Repros from #12011
323
337
324
338
class Base {
@@ -592,6 +606,27 @@ type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynami
592
606
function getFlagsFromDynamicRecord< Flag extends string > (record: DynamicDBRecord< Flag > , flags: Flag[]) {
593
607
return record [ flags [ 0 ] ] ;
594
608
}
609
+
610
+ // Repro from #21368
611
+
612
+ interface I {
613
+ foo : string ;
614
+ }
615
+
616
+ declare function take< T > (p: T): void;
617
+
618
+ function fn< T extends I , K extends keyof T > (o: T, k: K) {
619
+ take < { } | null | undefined > ( o [ k ] ) ;
620
+ take < any > ( o [ k ] ) ;
621
+ }
622
+
623
+ // Repro from #23133
624
+
625
+ class Unbounded< T > {
626
+ foo ( x : T [ keyof T ] ) {
627
+ let y : { } | undefined | null = x;
628
+ }
629
+ }
595
630
596
631
597
632
//// [keyofAndIndexedAccess.js]
@@ -830,6 +865,18 @@ function f90(x1, x2, x3, x4) {
830
865
x3 . length ;
831
866
x4 . length ;
832
867
}
868
+ function f91(x, y, z) {
869
+ var a ;
870
+ a = x ;
871
+ a = y ;
872
+ a = z ;
873
+ }
874
+ function f92(x, y, z) {
875
+ var a ;
876
+ a = x ;
877
+ a = y ;
878
+ a = z ;
879
+ }
833
880
// Repros from #12011
834
881
var Base = /** @class */ (function () {
835
882
function Base ( ) {
@@ -986,6 +1033,19 @@ function getFlagsFromSimpleRecord(record, flags) {
986
1033
function getFlagsFromDynamicRecord ( record , flags ) {
987
1034
return record [ flags [ 0 ] ] ;
988
1035
}
1036
+ function fn ( o , k ) {
1037
+ take ( o [ k ] ) ;
1038
+ take ( o [ k ] ) ;
1039
+ }
1040
+ // Repro from #23133
1041
+ var Unbounded = /** @class */ ( function ( ) {
1042
+ function Unbounded ( ) {
1043
+ }
1044
+ Unbounded . prototype . foo = function ( x ) {
1045
+ var y = x ;
1046
+ } ;
1047
+ return Unbounded ;
1048
+ } ( ) ) ;
989
1049
990
1050
991
1051
//// [keyofAndIndexedAccess.d.ts]
@@ -1126,6 +1186,8 @@ declare type S2 = {
1126
1186
b : string ;
1127
1187
} ;
1128
1188
declare function f90< T extends S2 , K extends keyof S2 > (x1: S2[keyof S2], x2: T[keyof S2], x3: S2[K], x4: T[K]): void;
1189
+ declare function f91< T , K extends keyof T > (x: T, y: T[keyof T], z: T[K]): void;
1190
+ declare function f92< T , K extends keyof T > (x: T, y: T[keyof T], z: T[K]): void;
1129
1191
declare class Base {
1130
1192
get < K extends keyof this > ( prop : K ) : this [ K ] ;
1131
1193
set < K extends keyof this > ( prop : K , value : this [ K ] ) : void ;
@@ -1298,3 +1360,11 @@ declare type DynamicDBRecord<Flag extends string> = ({
1298
1360
dynamicField : string ;
1299
1361
} ) & DBBoolTable < Flag > ;
1300
1362
declare function getFlagsFromDynamicRecord< Flag extends string > (record: DynamicDBRecord< Flag > , flags: Flag[]): DynamicDBRecord< Flag > [Flag];
1363
+ interface I {
1364
+ foo : string ;
1365
+ }
1366
+ declare function take< T > (p: T): void;
1367
+ declare function fn< T extends I , K extends keyof T > (o: T, k: K): void;
1368
+ declare class Unbounded< T > {
1369
+ foo ( x : T [ keyof T ] ) : void ;
1370
+ }
0 commit comments