2014-07-13 01:04:16 +02:00
|
|
|
//// [genericImplements.ts]
|
|
|
|
class A { a; };
|
|
|
|
class B { b; };
|
|
|
|
interface I {
|
|
|
|
f<T extends A>(): T;
|
|
|
|
} // { f: () => { a; } }
|
|
|
|
|
|
|
|
// OK
|
|
|
|
class X implements I {
|
|
|
|
f<T extends B>(): T { return undefined; }
|
|
|
|
} // { f: () => { b; } }
|
|
|
|
|
|
|
|
// OK
|
|
|
|
class Y implements I {
|
|
|
|
f<T extends A>(): T { return undefined; }
|
|
|
|
} // { f: () => { a; } }
|
|
|
|
|
|
|
|
// OK
|
|
|
|
class Z implements I {
|
|
|
|
f<T>(): T { return undefined; }
|
|
|
|
} // { f: <T>() => T }
|
|
|
|
|
|
|
|
//// [genericImplements.js]
|
|
|
|
var A = (function () {
|
|
|
|
function A() {
|
|
|
|
}
|
|
|
|
return A;
|
|
|
|
})();
|
|
|
|
;
|
|
|
|
var B = (function () {
|
|
|
|
function B() {
|
|
|
|
}
|
|
|
|
return B;
|
|
|
|
})();
|
|
|
|
;
|
2014-08-14 15:42:18 +02:00
|
|
|
// OK
|
2014-07-13 01:04:16 +02:00
|
|
|
var X = (function () {
|
|
|
|
function X() {
|
|
|
|
}
|
2015-02-07 05:03:24 +01:00
|
|
|
X.prototype.f = function () { return undefined; };
|
2014-07-13 01:04:16 +02:00
|
|
|
return X;
|
2014-08-15 22:18:54 +02:00
|
|
|
})(); // { f: () => { b; } }
|
2014-08-14 15:42:18 +02:00
|
|
|
// OK
|
2014-07-13 01:04:16 +02:00
|
|
|
var Y = (function () {
|
|
|
|
function Y() {
|
|
|
|
}
|
2015-02-07 05:03:24 +01:00
|
|
|
Y.prototype.f = function () { return undefined; };
|
2014-07-13 01:04:16 +02:00
|
|
|
return Y;
|
2014-08-15 22:18:54 +02:00
|
|
|
})(); // { f: () => { a; } }
|
2014-08-14 15:42:18 +02:00
|
|
|
// OK
|
2014-07-13 01:04:16 +02:00
|
|
|
var Z = (function () {
|
|
|
|
function Z() {
|
|
|
|
}
|
2015-02-07 05:03:24 +01:00
|
|
|
Z.prototype.f = function () { return undefined; };
|
2014-07-13 01:04:16 +02:00
|
|
|
return Z;
|
2014-08-15 23:32:08 +02:00
|
|
|
})(); // { f: <T>() => T }
|