Add tests
This commit is contained in:
parent
2911d5d7d7
commit
7befd35009
2 changed files with 43 additions and 8 deletions
|
@ -567,3 +567,21 @@ function f3<T, K extends Extract<keyof T, string>>(t: T, k: K, tk: T[K]): void {
|
|||
type Predicates<TaggedRecord> = {
|
||||
[T in keyof TaggedRecord]: (variant: TaggedRecord[keyof TaggedRecord]) => variant is TaggedRecord[T]
|
||||
}
|
||||
|
||||
// Repro from #23618
|
||||
|
||||
type DBBoolTable<K extends string> = { [k in K]: 0 | 1 }
|
||||
enum Flag {
|
||||
FLAG_1 = "flag_1",
|
||||
FLAG_2 = "flag_2"
|
||||
}
|
||||
|
||||
type SimpleDBRecord<Flag extends string> = { staticField: number } & DBBoolTable<Flag>
|
||||
function getFlagsFromSimpleRecord<Flag extends string>(record: SimpleDBRecord<Flag>, flags: Flag[]) {
|
||||
return record[flags[0]];
|
||||
}
|
||||
|
||||
type DynamicDBRecord<Flag extends string> = ({ dynamicField: number } | { dynamicField: string }) & DBBoolTable<Flag>
|
||||
function getFlagsFromDynamicRecord<Flag extends string>(record: DynamicDBRecord<Flag>, flags: Flag[]) {
|
||||
return record[flags[0]];
|
||||
}
|
||||
|
|
|
@ -67,15 +67,32 @@ function f10(shape: Shape) {
|
|||
setProperty(shape, cond ? "name" : "size", 10); // Error
|
||||
}
|
||||
|
||||
function f20<T, U>(k1: keyof (T | U), k2: keyof (T & U), o1: T | U, o2: T & U) {
|
||||
o1[k1];
|
||||
o1[k2]; // Error
|
||||
o2[k1];
|
||||
o2[k2];
|
||||
o1 = o2;
|
||||
o2 = o1; // Error
|
||||
k1 = k2; // Error
|
||||
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) {
|
||||
x[k1];
|
||||
x[k2];
|
||||
x[k3]; // Error
|
||||
x[k4]; // Error
|
||||
|
||||
y[k1];
|
||||
y[k2];
|
||||
y[k3];
|
||||
y[k4];
|
||||
|
||||
k1 = k2;
|
||||
k1 = k3; // Error
|
||||
k1 = k4; // Error
|
||||
|
||||
k2 = k1;
|
||||
k2 = k3; // Error
|
||||
k2 = k4; // Error
|
||||
|
||||
k3 = k1;
|
||||
k3 = k2;
|
||||
k3 = k4;
|
||||
|
||||
k4 = k1;
|
||||
k4 = k2;
|
||||
k4 = k3;
|
||||
}
|
||||
|
||||
// Repro from #17166
|
||||
|
|
Loading…
Reference in a new issue