1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
//// [genericClassWithFunctionTypedMemberArguments.ts]
// Generic functions used as arguments for function typed parameters are not used to make inferences from
// Using function arguments, no errors expected
module ImmediatelyFix {
class C<T> {
foo<T>(x: (a: T) => T) {
return x(null);
}
}
var c = new C<number>();
var r = c.foo(<U>(x: U) => ''); // {}
var r2 = c.foo<string>(<U>(x: U) => ''); // string
var r3 = c.foo(x => ''); // {}
class C2<T> {
foo(x: (a: T) => T) {
return x(null);
}
}
var c2 = new C2<number>();
var ra = c2.foo(<U>(x: U) => 1); // number
var r3a = c2.foo(x => 1); // number
}
module WithCandidates {
class C<T> {
foo2<T, U>(x: T, cb: (a: T) => U) {
return cb(x);
}
}
var c: C<number>;
var r4 = c.foo2(1, function <Z>(a: Z) { return '' }); // string, contextual signature instantiation is applied to generic functions
var r5 = c.foo2(1, (a) => ''); // string
var r6 = c.foo2<string, number>('', <Z>(a: Z) => 1); // number
class C2<T, U> {
foo3(x: T, cb: (a: T) => U, y: U) {
return cb(x);
}
}
var c2: C2<number, string>;
var r7 = c2.foo3(1, <Z>(a: Z) => '', ''); // string
var r8 = c2.foo3(1, function (a) { return '' }, ''); // string
class C3<T, U> {
foo3<T,U>(x: T, cb: (a: T) => U, y: U) {
return cb(x);
}
}
var c3: C3<number, string>;
function other<T, U>(t: T, u: U) {
var r10 = c.foo2(1, (x: T) => ''); // error
var r10 = c.foo2(1, (x) => ''); // string
var r11 = c3.foo3(1, (x: T) => '', ''); // error
var r11b = c3.foo3(1, (x: T) => '', 1); // error
var r12 = c3.foo3(1, function (a) { return '' }, 1); // error
}
}
//// [genericClassWithFunctionTypedMemberArguments.js]
// Generic functions used as arguments for function typed parameters are not used to make inferences from
// Using function arguments, no errors expected
var ImmediatelyFix;
(function (ImmediatelyFix) {
var C = /** @class */ (function () {
function C() {
}
C.prototype.foo = function (x) {
return x(null);
};
return C;
}());
var c = new C();
var r = c.foo(function (x) { return ''; }); // {}
var r2 = c.foo(function (x) { return ''; }); // string
var r3 = c.foo(function (x) { return ''; }); // {}
var C2 = /** @class */ (function () {
function C2() {
}
C2.prototype.foo = function (x) {
return x(null);
};
return C2;
}());
var c2 = new C2();
var ra = c2.foo(function (x) { return 1; }); // number
var r3a = c2.foo(function (x) { return 1; }); // number
})(ImmediatelyFix || (ImmediatelyFix = {}));
var WithCandidates;
(function (WithCandidates) {
var C = /** @class */ (function () {
function C() {
}
C.prototype.foo2 = function (x, cb) {
return cb(x);
};
return C;
}());
var c;
var r4 = c.foo2(1, function (a) { return ''; }); // string, contextual signature instantiation is applied to generic functions
var r5 = c.foo2(1, function (a) { return ''; }); // string
var r6 = c.foo2('', function (a) { return 1; }); // number
var C2 = /** @class */ (function () {
function C2() {
}
C2.prototype.foo3 = function (x, cb, y) {
return cb(x);
};
return C2;
}());
var c2;
var r7 = c2.foo3(1, function (a) { return ''; }, ''); // string
var r8 = c2.foo3(1, function (a) { return ''; }, ''); // string
var C3 = /** @class */ (function () {
function C3() {
}
C3.prototype.foo3 = function (x, cb, y) {
return cb(x);
};
return C3;
}());
var c3;
function other(t, u) {
var r10 = c.foo2(1, function (x) { return ''; }); // error
var r10 = c.foo2(1, function (x) { return ''; }); // string
var r11 = c3.foo3(1, function (x) { return ''; }, ''); // error
var r11b = c3.foo3(1, function (x) { return ''; }, 1); // error
var r12 = c3.foo3(1, function (a) { return ''; }, 1); // error
}
})(WithCandidates || (WithCandidates = {}));
|