File: genericClassWithFunctionTypedMemberArguments.js

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (137 lines) | stat: -rw-r--r-- 4,400 bytes parent folder | download | duplicates (5)
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 = {}));