Skip to content

Commit 7befd35

Browse files
committedApr 24, 2018
Add tests
1 parent 2911d5d commit 7befd35

File tree

2 files changed

+43
-8
lines changed

2 files changed

+43
-8
lines changed
 

‎tests/cases/conformance/types/keyof/keyofAndIndexedAccess.ts

+18
Original file line numberDiff line numberDiff line change
@@ -567,3 +567,21 @@ function f3<T, K extends Extract<keyof T, string>>(t: T, k: K, tk: T[K]): void {
567567
type Predicates<TaggedRecord> = {
568568
[T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T]
569569
}
570+
571+
// Repro from #23618
572+
573+
type DBBoolTable<K extends string> = { [k in K]: 0 | 1 }
574+
enum Flag {
575+
FLAG_1 = "flag_1",
576+
FLAG_2 = "flag_2"
577+
}
578+
579+
type SimpleDBRecord<Flag extends string> = { staticField: number } & DBBoolTable<Flag>
580+
function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) {
581+
return record[flags[0]];
582+
}
583+
584+
type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable<Flag>
585+
function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) {
586+
return record[flags[0]];
587+
}

‎tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts

+25-8
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,32 @@ function f10(shape: Shape) {
6767
setProperty(shape, cond ? "name" : "size", 10); // Error
6868
}
6969

70-
function f20<T, U>(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) {
71-
o1[k1];
72-
o1[k2]; // Error
73-
o2[k1];
74-
o2[k2];
75-
o1 = o2;
76-
o2 = o1; // Error
77-
k1 = k2; // Error
70+
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) {
71+
x[k1];
72+
x[k2];
73+
x[k3]; // Error
74+
x[k4]; // Error
75+
76+
y[k1];
77+
y[k2];
78+
y[k3];
79+
y[k4];
80+
81+
k1 = k2;
82+
k1 = k3; // Error
83+
k1 = k4; // Error
84+
7885
k2 = k1;
86+
k2 = k3; // Error
87+
k2 = k4; // Error
88+
89+
k3 = k1;
90+
k3 = k2;
91+
k3 = k4;
92+
93+
k4 = k1;
94+
k4 = k2;
95+
k4 = k3;
7996
}
8097

8198
// Repro from #17166

0 commit comments

Comments
 (0)
Please sign in to comment.