TypeScript/tests/baselines/reference/subtypesOfTypeParameterWithConstraints.js
2015-05-01 10:49:54 -07:00

402 lines
8.9 KiB
TypeScript

//// [subtypesOfTypeParameterWithConstraints.ts]
// checking whether other types are subtypes of type parameters with constraints
class C3<T> {
foo: T;
}
class D1<T extends U, U> extends C3<T> {
[x: string]: T;
foo: T; // ok
}
class D2<T extends U, U> extends C3<U> {
[x: string]: U;
foo: T; // ok
}
class D3<T extends U, U> extends C3<T> {
[x: string]: T;
foo: U; // error
}
class D4<T extends U, U> extends C3<U> {
[x: string]: U;
foo: U; // ok
}
// V > U > T
// test if T is subtype of T, U, V
// should all work
class D5<T extends U, U extends V, V> extends C3<T> {
[x: string]: T;
foo: T; // ok
}
class D6<T extends U, U extends V, V> extends C3<U> {
[x: string]: U;
foo: T;
}
class D7<T extends U, U extends V, V> extends C3<V> {
[x: string]: V;
foo: T; // ok
}
// test if U is a subtype of T, U, V
// only a subtype of V and itself
class D8<T extends U, U extends V, V> extends C3<T> {
[x: string]: T;
foo: U; // error
}
class D9<T extends U, U extends V, V> extends C3<U> {
[x: string]: U;
foo: U; // ok
}
class D10<T extends U, U extends V, V> extends C3<V> {
[x: string]: V;
foo: U; // ok
}
// test if V is a subtype of T, U, V
// only a subtype of itself
class D11<T extends U, U extends V, V> extends C3<T> {
[x: string]: T;
foo: V; // error
}
class D12<T extends U, U extends V, V> extends C3<U> {
[x: string]: U;
foo: V; // error
}
class D13<T extends U, U extends V, V> extends C3<V> {
[x: string]: V;
foo: V; // ok
}
// Date > V > U > T
// test if T is subtype of T, U, V, Date
// should all work
class D14<T extends U, U extends V, V extends Date> extends C3<Date> {
[x: string]: Date;
foo: T; // ok
}
class D15<T extends U, U extends V, V extends Date> extends C3<T> {
[x: string]: T;
foo: T; // ok
}
class D16<T extends U, U extends V, V extends Date> extends C3<U> {
[x: string]: U;
foo: T;
}
class D17<T extends U, U extends V, V extends Date> extends C3<V> {
[x: string]: V;
foo: T;
}
// test if U is a subtype of T, U, V, Date
// only a subtype of V, Date and itself
class D18<T extends U, U extends V, V extends Date> extends C3<Date> {
[x: string]: Date;
foo: T; // ok
}
class D19<T extends U, U extends V, V extends Date> extends C3<T> {
[x: string]: T;
foo: U; // error
}
class D20<T extends U, U extends V, V extends Date> extends C3<U> {
[x: string]: U;
foo: U; // ok
}
class D21<T extends U, U extends V, V extends Date> extends C3<V> {
[x: string]: V;
foo: U;
}
// test if V is a subtype of T, U, V, Date
// only a subtype of itself and Date
class D22<T extends U, U extends V, V extends Date> extends C3<Date> {
[x: string]: Date;
foo: T; // ok
}
class D23<T extends U, U extends V, V extends Date> extends C3<T> {
[x: string]: T;
foo: V; // error
}
class D24<T extends U, U extends V, V extends Date> extends C3<U> {
[x: string]: U;
foo: V; // error
}
class D25<T extends U, U extends V, V extends Date> extends C3<V> {
[x: string]: V;
foo: V; // ok
}
// test if Date is a subtype of T, U, V, Date
// only a subtype of itself
class D26<T extends U, U extends V, V extends Date> extends C3<Date> {
[x: string]: Date;
foo: Date; // ok
}
class D27<T extends U, U extends V, V extends Date> extends C3<T> {
[x: string]: T;
foo: Date; // error
}
class D28<T extends U, U extends V, V extends Date> extends C3<U> {
[x: string]: U;
foo: Date; // error
}
class D29<T extends U, U extends V, V extends Date> extends C3<V> {
[x: string]: V;
foo: Date; // error
}
//// [subtypesOfTypeParameterWithConstraints.js]
// checking whether other types are subtypes of type parameters with constraints
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
var C3 = (function () {
function C3() {
}
return C3;
})();
var D1 = (function (_super) {
__extends(D1, _super);
function D1() {
_super.apply(this, arguments);
}
return D1;
})(C3);
var D2 = (function (_super) {
__extends(D2, _super);
function D2() {
_super.apply(this, arguments);
}
return D2;
})(C3);
var D3 = (function (_super) {
__extends(D3, _super);
function D3() {
_super.apply(this, arguments);
}
return D3;
})(C3);
var D4 = (function (_super) {
__extends(D4, _super);
function D4() {
_super.apply(this, arguments);
}
return D4;
})(C3);
// V > U > T
// test if T is subtype of T, U, V
// should all work
var D5 = (function (_super) {
__extends(D5, _super);
function D5() {
_super.apply(this, arguments);
}
return D5;
})(C3);
var D6 = (function (_super) {
__extends(D6, _super);
function D6() {
_super.apply(this, arguments);
}
return D6;
})(C3);
var D7 = (function (_super) {
__extends(D7, _super);
function D7() {
_super.apply(this, arguments);
}
return D7;
})(C3);
// test if U is a subtype of T, U, V
// only a subtype of V and itself
var D8 = (function (_super) {
__extends(D8, _super);
function D8() {
_super.apply(this, arguments);
}
return D8;
})(C3);
var D9 = (function (_super) {
__extends(D9, _super);
function D9() {
_super.apply(this, arguments);
}
return D9;
})(C3);
var D10 = (function (_super) {
__extends(D10, _super);
function D10() {
_super.apply(this, arguments);
}
return D10;
})(C3);
// test if V is a subtype of T, U, V
// only a subtype of itself
var D11 = (function (_super) {
__extends(D11, _super);
function D11() {
_super.apply(this, arguments);
}
return D11;
})(C3);
var D12 = (function (_super) {
__extends(D12, _super);
function D12() {
_super.apply(this, arguments);
}
return D12;
})(C3);
var D13 = (function (_super) {
__extends(D13, _super);
function D13() {
_super.apply(this, arguments);
}
return D13;
})(C3);
// Date > V > U > T
// test if T is subtype of T, U, V, Date
// should all work
var D14 = (function (_super) {
__extends(D14, _super);
function D14() {
_super.apply(this, arguments);
}
return D14;
})(C3);
var D15 = (function (_super) {
__extends(D15, _super);
function D15() {
_super.apply(this, arguments);
}
return D15;
})(C3);
var D16 = (function (_super) {
__extends(D16, _super);
function D16() {
_super.apply(this, arguments);
}
return D16;
})(C3);
var D17 = (function (_super) {
__extends(D17, _super);
function D17() {
_super.apply(this, arguments);
}
return D17;
})(C3);
// test if U is a subtype of T, U, V, Date
// only a subtype of V, Date and itself
var D18 = (function (_super) {
__extends(D18, _super);
function D18() {
_super.apply(this, arguments);
}
return D18;
})(C3);
var D19 = (function (_super) {
__extends(D19, _super);
function D19() {
_super.apply(this, arguments);
}
return D19;
})(C3);
var D20 = (function (_super) {
__extends(D20, _super);
function D20() {
_super.apply(this, arguments);
}
return D20;
})(C3);
var D21 = (function (_super) {
__extends(D21, _super);
function D21() {
_super.apply(this, arguments);
}
return D21;
})(C3);
// test if V is a subtype of T, U, V, Date
// only a subtype of itself and Date
var D22 = (function (_super) {
__extends(D22, _super);
function D22() {
_super.apply(this, arguments);
}
return D22;
})(C3);
var D23 = (function (_super) {
__extends(D23, _super);
function D23() {
_super.apply(this, arguments);
}
return D23;
})(C3);
var D24 = (function (_super) {
__extends(D24, _super);
function D24() {
_super.apply(this, arguments);
}
return D24;
})(C3);
var D25 = (function (_super) {
__extends(D25, _super);
function D25() {
_super.apply(this, arguments);
}
return D25;
})(C3);
// test if Date is a subtype of T, U, V, Date
// only a subtype of itself
var D26 = (function (_super) {
__extends(D26, _super);
function D26() {
_super.apply(this, arguments);
}
return D26;
})(C3);
var D27 = (function (_super) {
__extends(D27, _super);
function D27() {
_super.apply(this, arguments);
}
return D27;
})(C3);
var D28 = (function (_super) {
__extends(D28, _super);
function D28() {
_super.apply(this, arguments);
}
return D28;
})(C3);
var D29 = (function (_super) {
__extends(D29, _super);
function D29() {
_super.apply(this, arguments);
}
return D29;
})(C3);