Add new tests

This commit is contained in:
Anders Hejlsberg
2016-11-18 06:27:45 -08:00
parent 79bdc26745
commit 075a3eb98f
3 changed files with 437 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
// @strictNullChecks: true
// @declaration: true
function f1<T>(x: T, k: keyof T) {
return x[k];
}
function f2<T, K extends keyof T>(x: T, k: K) {
return x[k];
}
function f3<T, U extends T>(x: T, y: U, k: keyof T) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f4<T, U extends T, K extends keyof T>(x: T, y: U, k: K) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f5<T, U extends T>(x: T, y: U, k: keyof U) {
x[k] = y[k]; // Error
y[k] = x[k]; // Error
}
function f6<T, U extends T, K extends keyof U>(x: T, y: U, k: K) {
x[k] = y[k]; // Error
y[k] = x[k]; // Error
}
function f10<T>(x: T, y: Partial<T>, k: keyof T) {
x[k] = y[k]; // Error
y[k] = x[k];
}
function f11<T, K extends keyof T>(x: T, y: Partial<T>, k: K) {
x[k] = y[k]; // Error
y[k] = x[k];
}
function f12<T, U extends T>(x: T, y: Partial<U>, k: keyof T) {
x[k] = y[k]; // Error
y[k] = x[k]; // Error
}
function f13<T, U extends T, K extends keyof T>(x: T, y: Partial<U>, k: K) {
x[k] = y[k]; // Error
y[k] = x[k]; // Error
}
function f20<T>(x: T, y: Readonly<T>, k: keyof T) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f21<T, K extends keyof T>(x: T, y: Readonly<T>, k: K) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f22<T, U extends T>(x: T, y: Readonly<U>, k: keyof T) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f23<T, U extends T, K extends keyof T>(x: T, y: Readonly<U>, k: K) {
x[k] = y[k];
y[k] = x[k]; // Error
}
function f30<T>(x: T, y: Partial<T>) {
x = y; // Error
y = x;
}
function f31<T>(x: T, y: Partial<T>) {
x = y; // Error
y = x;
}
function f40<T>(x: T, y: Readonly<T>) {
x = y;
y = x;
}
function f41<T>(x: T, y: Readonly<T>) {
x = y;
y = x;
}