Add tests

This commit is contained in:
Anders Hejlsberg 2018-04-23 21:09:49 -07:00
parent 2911d5d7d7
commit 7befd35009
2 changed files with 43 additions and 8 deletions

View file

@ -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]];
}

View file

@ -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