Skip to content

Commit f0c3291

Browse files
committed
Accept new baselines
1 parent 7befd35 commit f0c3291

7 files changed

+515
-156
lines changed

tests/baselines/reference/keyofAndIndexedAccess.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,24 @@ function f3<T, K extends Extract<keyof T, string>>(t: T, k: K, tk: T[K]): void {
565565
type Predicates<TaggedRecord> = {
566566
[T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T]
567567
}
568+
569+
// Repro from #23618
570+
571+
type DBBoolTable<K extends string> = { [k in K]: 0 | 1 }
572+
enum Flag {
573+
FLAG_1 = "flag_1",
574+
FLAG_2 = "flag_2"
575+
}
576+
577+
type SimpleDBRecord<Flag extends string> = { staticField: number } & DBBoolTable<Flag>
578+
function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) {
579+
return record[flags[0]];
580+
}
581+
582+
type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable<Flag>
583+
function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) {
584+
return record[flags[0]];
585+
}
568586

569587

570588
//// [keyofAndIndexedAccess.js]
@@ -948,6 +966,17 @@ function f3(t, k, tk) {
948966
t[key] = tk; // ok, T[K] ==> T[keyof T]
949967
}
950968
}
969+
var Flag;
970+
(function (Flag) {
971+
Flag["FLAG_1"] = "flag_1";
972+
Flag["FLAG_2"] = "flag_2";
973+
})(Flag || (Flag = {}));
974+
function getFlagsFromSimpleRecord(record, flags) {
975+
return record[flags[0]];
976+
}
977+
function getFlagsFromDynamicRecord(record, flags) {
978+
return record[flags[0]];
979+
}
951980

952981

953982
//// [keyofAndIndexedAccess.d.ts]
@@ -1212,3 +1241,20 @@ declare function f3<T, K extends Extract<keyof T, string>>(t: T, k: K, tk: T[K])
12121241
declare type Predicates<TaggedRecord> = {
12131242
[T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T];
12141243
};
1244+
declare type DBBoolTable<K extends string> = {
1245+
[k in K]: 0 | 1;
1246+
};
1247+
declare enum Flag {
1248+
FLAG_1 = "flag_1",
1249+
FLAG_2 = "flag_2"
1250+
}
1251+
declare type SimpleDBRecord<Flag extends string> = {
1252+
staticField: number;
1253+
} & DBBoolTable<Flag>;
1254+
declare function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]): SimpleDBRecord<Flag>[Flag];
1255+
declare type DynamicDBRecord<Flag extends string> = ({
1256+
dynamicField: number;
1257+
} | {
1258+
dynamicField: string;
1259+
}) & DBBoolTable<Flag>;
1260+
declare function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]): DynamicDBRecord<Flag>[Flag];

tests/baselines/reference/keyofAndIndexedAccess.symbols

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,3 +2010,64 @@ type Predicates<TaggedRecord> = {
20102010
>T : Symbol(T, Decl(keyofAndIndexedAccess.ts, 564, 3))
20112011
}
20122012

2013+
// Repro from #23618
2014+
2015+
type DBBoolTable<K extends string> = { [k in K]: 0 | 1 }
2016+
>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 565, 1))
2017+
>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 569, 17))
2018+
>k : Symbol(k, Decl(keyofAndIndexedAccess.ts, 569, 40))
2019+
>K : Symbol(K, Decl(keyofAndIndexedAccess.ts, 569, 17))
2020+
2021+
enum Flag {
2022+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 569, 56))
2023+
2024+
FLAG_1 = "flag_1",
2025+
>FLAG_1 : Symbol(Flag.FLAG_1, Decl(keyofAndIndexedAccess.ts, 570, 11))
2026+
2027+
FLAG_2 = "flag_2"
2028+
>FLAG_2 : Symbol(Flag.FLAG_2, Decl(keyofAndIndexedAccess.ts, 571, 22))
2029+
}
2030+
2031+
type SimpleDBRecord<Flag extends string> = { staticField: number } & DBBoolTable<Flag>
2032+
>SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 573, 1))
2033+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 575, 20))
2034+
>staticField : Symbol(staticField, Decl(keyofAndIndexedAccess.ts, 575, 44))
2035+
>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 565, 1))
2036+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 575, 20))
2037+
2038+
function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) {
2039+
>getFlagsFromSimpleRecord : Symbol(getFlagsFromSimpleRecord, Decl(keyofAndIndexedAccess.ts, 575, 86))
2040+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 576, 34))
2041+
>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 576, 55))
2042+
>SimpleDBRecord : Symbol(SimpleDBRecord, Decl(keyofAndIndexedAccess.ts, 573, 1))
2043+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 576, 34))
2044+
>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 576, 84))
2045+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 576, 34))
2046+
2047+
return record[flags[0]];
2048+
>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 576, 55))
2049+
>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 576, 84))
2050+
}
2051+
2052+
type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable<Flag>
2053+
>DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 578, 1))
2054+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 580, 21))
2055+
>dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 580, 46))
2056+
>dynamicField : Symbol(dynamicField, Decl(keyofAndIndexedAccess.ts, 580, 73))
2057+
>DBBoolTable : Symbol(DBBoolTable, Decl(keyofAndIndexedAccess.ts, 565, 1))
2058+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 580, 21))
2059+
2060+
function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) {
2061+
>getFlagsFromDynamicRecord : Symbol(getFlagsFromDynamicRecord, Decl(keyofAndIndexedAccess.ts, 580, 117))
2062+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 581, 35))
2063+
>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 581, 56))
2064+
>DynamicDBRecord : Symbol(DynamicDBRecord, Decl(keyofAndIndexedAccess.ts, 578, 1))
2065+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 581, 35))
2066+
>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 581, 86))
2067+
>Flag : Symbol(Flag, Decl(keyofAndIndexedAccess.ts, 581, 35))
2068+
2069+
return record[flags[0]];
2070+
>record : Symbol(record, Decl(keyofAndIndexedAccess.ts, 581, 56))
2071+
>flags : Symbol(flags, Decl(keyofAndIndexedAccess.ts, 581, 86))
2072+
}
2073+

tests/baselines/reference/keyofAndIndexedAccess.types

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2345,3 +2345,72 @@ type Predicates<TaggedRecord> = {
23452345
>T : T
23462346
}
23472347

2348+
// Repro from #23618
2349+
2350+
type DBBoolTable<K extends string> = { [k in K]: 0 | 1 }
2351+
>DBBoolTable : DBBoolTable<K>
2352+
>K : K
2353+
>k : k
2354+
>K : K
2355+
2356+
enum Flag {
2357+
>Flag : Flag
2358+
2359+
FLAG_1 = "flag_1",
2360+
>FLAG_1 : Flag.FLAG_1
2361+
>"flag_1" : "flag_1"
2362+
2363+
FLAG_2 = "flag_2"
2364+
>FLAG_2 : Flag.FLAG_2
2365+
>"flag_2" : "flag_2"
2366+
}
2367+
2368+
type SimpleDBRecord<Flag extends string> = { staticField: number } & DBBoolTable<Flag>
2369+
>SimpleDBRecord : SimpleDBRecord<Flag>
2370+
>Flag : Flag
2371+
>staticField : number
2372+
>DBBoolTable : DBBoolTable<K>
2373+
>Flag : Flag
2374+
2375+
function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) {
2376+
>getFlagsFromSimpleRecord : <Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) => SimpleDBRecord<Flag>[Flag]
2377+
>Flag : Flag
2378+
>record : SimpleDBRecord<Flag>
2379+
>SimpleDBRecord : SimpleDBRecord<Flag>
2380+
>Flag : Flag
2381+
>flags : Flag[]
2382+
>Flag : Flag
2383+
2384+
return record[flags[0]];
2385+
>record[flags[0]] : SimpleDBRecord<Flag>[Flag]
2386+
>record : SimpleDBRecord<Flag>
2387+
>flags[0] : Flag
2388+
>flags : Flag[]
2389+
>0 : 0
2390+
}
2391+
2392+
type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable<Flag>
2393+
>DynamicDBRecord : DynamicDBRecord<Flag>
2394+
>Flag : Flag
2395+
>dynamicField : number
2396+
>dynamicField : string
2397+
>DBBoolTable : DBBoolTable<K>
2398+
>Flag : Flag
2399+
2400+
function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) {
2401+
>getFlagsFromDynamicRecord : <Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) => DynamicDBRecord<Flag>[Flag]
2402+
>Flag : Flag
2403+
>record : DynamicDBRecord<Flag>
2404+
>DynamicDBRecord : DynamicDBRecord<Flag>
2405+
>Flag : Flag
2406+
>flags : Flag[]
2407+
>Flag : Flag
2408+
2409+
return record[flags[0]];
2410+
>record[flags[0]] : DynamicDBRecord<Flag>[Flag]
2411+
>record : DynamicDBRecord<Flag>
2412+
>flags[0] : Flag
2413+
>flags : Flag[]
2414+
>0 : 0
2415+
}
2416+

tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,44 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(64,33): error
2222
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(66,24): error TS2345: Argument of type '"size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
2323
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(67,24): error TS2345: Argument of type '"name" | "size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
2424
Type '"size"' is not assignable to type '"name" | "width" | "height" | "visible"'.
25-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(72,5): error TS2536: Type 'keyof T | keyof U' cannot be used to index type 'T | U'.
26-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(76,5): error TS2322: Type 'T | U' is not assignable to type 'T & U'.
27-
Type 'T' is not assignable to type 'T & U'.
28-
Type 'T' is not assignable to type 'U'.
29-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(77,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
25+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(73,5): error TS2536: Type 'keyof T | keyof U' cannot be used to index type 'T | U'.
26+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(74,5): error TS2536: Type 'keyof T | keyof U' cannot be used to index type 'T | U'.
27+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(82,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
3028
Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
3129
Type 'string | number | symbol' is not assignable to type 'keyof T & keyof U'.
3230
Type 'string' is not assignable to type 'keyof T & keyof U'.
3331
Type 'string' is not assignable to type 'keyof T'.
3432
Type 'keyof T' is not assignable to type 'keyof U'.
3533
Type 'string | number | symbol' is not assignable to type 'keyof U'.
3634
Type 'string' is not assignable to type 'keyof U'.
37-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(86,9): error TS2322: Type 'Extract<keyof T, string>' is not assignable to type 'K'.
35+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(83,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
36+
Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
37+
Type 'keyof T' is not assignable to type 'keyof U'.
38+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(86,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
39+
Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
40+
Type 'keyof T' is not assignable to type 'keyof U'.
41+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(87,5): error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
42+
Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
43+
Type 'keyof T' is not assignable to type 'keyof U'.
44+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(103,9): error TS2322: Type 'Extract<keyof T, string>' is not assignable to type 'K'.
3845
Type 'string & keyof T' is not assignable to type 'K'.
3946
Type 'string' is not assignable to type 'K'.
40-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(88,9): error TS2322: Type 'T[Extract<keyof T, string>]' is not assignable to type 'T[K]'.
47+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(105,9): error TS2322: Type 'T[Extract<keyof T, string>]' is not assignable to type 'T[K]'.
4148
Type 'Extract<keyof T, string>' is not assignable to type 'K'.
42-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(91,5): error TS2322: Type 'T[K]' is not assignable to type 'U[K]'.
49+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(108,5): error TS2322: Type 'T[K]' is not assignable to type 'U[K]'.
4350
Type 'T' is not assignable to type 'U'.
44-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(94,5): error TS2322: Type 'T[J]' is not assignable to type 'U[J]'.
51+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(111,5): error TS2322: Type 'T[J]' is not assignable to type 'U[J]'.
4552
Type 'T' is not assignable to type 'U'.
46-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(97,5): error TS2322: Type 'T[K]' is not assignable to type 'T[J]'.
53+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(114,5): error TS2322: Type 'T[K]' is not assignable to type 'T[J]'.
4754
Type 'K' is not assignable to type 'J'.
4855
Type 'Extract<keyof T, string>' is not assignable to type 'J'.
4956
Type 'string & keyof T' is not assignable to type 'J'.
5057
Type 'string' is not assignable to type 'J'.
51-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error TS2322: Type 'T[K]' is not assignable to type 'U[J]'.
58+
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(117,5): error TS2322: Type 'T[K]' is not assignable to type 'U[J]'.
5259
Type 'T' is not assignable to type 'U'.
5360

5461

55-
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (31 errors) ====
62+
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (34 errors) ====
5663
class Shape {
5764
name: string;
5865
width: number;
@@ -168,20 +175,23 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error
168175
!!! error TS2345: Type '"size"' is not assignable to type '"name" | "width" | "height" | "visible"'.
169176
}
170177

171-
function f20<T, U>(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) {
172-
o1[k1];
173-
o1[k2]; // Error
174-
~~~~~~
178+
function f20<T, U>(x: T | U, y: T & U, k1: keyof (T | U), k2: keyof T & keyof U, k3: keyof (T & U), k4: keyof T | keyof U) {
179+
x[k1];
180+
x[k2];
181+
x[k3]; // Error
182+
~~~~~
175183
!!! error TS2536: Type 'keyof T | keyof U' cannot be used to index type 'T | U'.
176-
o2[k1];
177-
o2[k2];
178-
o1 = o2;
179-
o2 = o1; // Error
180-
~~
181-
!!! error TS2322: Type 'T | U' is not assignable to type 'T & U'.
182-
!!! error TS2322: Type 'T' is not assignable to type 'T & U'.
183-
!!! error TS2322: Type 'T' is not assignable to type 'U'.
184-
k1 = k2; // Error
184+
x[k4]; // Error
185+
~~~~~
186+
!!! error TS2536: Type 'keyof T | keyof U' cannot be used to index type 'T | U'.
187+
188+
y[k1];
189+
y[k2];
190+
y[k3];
191+
y[k4];
192+
193+
k1 = k2;
194+
k1 = k3; // Error
185195
~~
186196
!!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
187197
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
@@ -191,7 +201,31 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(100,5): error
191201
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof U'.
192202
!!! error TS2322: Type 'string | number | symbol' is not assignable to type 'keyof U'.
193203
!!! error TS2322: Type 'string' is not assignable to type 'keyof U'.
204+
k1 = k4; // Error
205+
~~
206+
!!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
207+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
208+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof U'.
209+
194210
k2 = k1;
211+
k2 = k3; // Error
212+
~~
213+
!!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
214+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
215+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof U'.
216+
k2 = k4; // Error
217+
~~
218+
!!! error TS2322: Type 'keyof T | keyof U' is not assignable to type 'keyof T & keyof U'.
219+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof T & keyof U'.
220+
!!! error TS2322: Type 'keyof T' is not assignable to type 'keyof U'.
221+
222+
k3 = k1;
223+
k3 = k2;
224+
k3 = k4;
225+
226+
k4 = k1;
227+
k4 = k2;
228+
k4 = k3;
195229
}
196230

197231
// Repro from #17166

0 commit comments

Comments
 (0)