@@ -319,6 +319,20 @@ function f90<T extends S2, K extends keyof S2>(x1: S2[keyof S2], x2: T[keyof S2]
319319 x4 . length ;
320320}
321321
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+
322336// Repros from #12011
323337
324338class Base {
@@ -592,6 +606,27 @@ type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynami
592606function getFlagsFromDynamicRecord< Flag extends string > (record: DynamicDBRecord< Flag > , flags: Flag[]) {
593607 return record [ flags [ 0 ] ] ;
594608}
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+ }
595630
596631
597632//// [keyofAndIndexedAccess.js]
@@ -830,6 +865,18 @@ function f90(x1, x2, x3, x4) {
830865 x3 . length ;
831866 x4 . length ;
832867}
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+ }
833880// Repros from #12011
834881var Base = /** @class */ (function () {
835882 function Base ( ) {
@@ -986,6 +1033,19 @@ function getFlagsFromSimpleRecord(record, flags) {
9861033function getFlagsFromDynamicRecord ( record , flags ) {
9871034 return record [ flags [ 0 ] ] ;
9881035}
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+ } ( ) ) ;
9891049
9901050
9911051//// [keyofAndIndexedAccess.d.ts]
@@ -1126,6 +1186,8 @@ declare type S2 = {
11261186 b : string ;
11271187} ;
11281188declare 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;
11291191declare class Base {
11301192 get < K extends keyof this > ( prop : K ) : this [ K ] ;
11311193 set < K extends keyof this > ( prop : K , value : this [ K ] ) : void ;
@@ -1298,3 +1360,11 @@ declare type DynamicDBRecord<Flag extends string> = ({
12981360 dynamicField : string ;
12991361} ) & DBBoolTable < Flag > ;
13001362declare 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