File: genericCallWithObjectTypeArgsAndConstraints2.types

package info (click to toggle)
node-typescript 2.1.5-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 203,960 kB
  • sloc: sh: 11; makefile: 5
file content (147 lines) | stat: -rw-r--r-- 2,923 bytes parent folder | download | duplicates (2)
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
138
139
140
141
142
143
144
145
146
147
=== tests/cases/conformance/types/typeRelationships/typeInference/genericCallWithObjectTypeArgsAndConstraints2.ts ===
// Generic call with constraints infering type parameter from object member properties
// No errors expected

class Base {
>Base : Base

    x: string;
>x : string
}
class Derived extends Base {
>Derived : Derived
>Base : Base

    y: string;
>y : string
}

function f<T extends Base>(x: { foo: T; bar: T }) {
>f : <T extends Base>(x: { foo: T; bar: T; }) => T
>T : T
>Base : Base
>x : { foo: T; bar: T; }
>foo : T
>T : T
>bar : T
>T : T

    var r: T;
>r : T
>T : T

    return r;
>r : T
}
var r = f({ foo: new Base(), bar: new Derived() });
>r : Base
>f({ foo: new Base(), bar: new Derived() }) : Base
>f : <T extends Base>(x: { foo: T; bar: T; }) => T
>{ foo: new Base(), bar: new Derived() } : { foo: Base; bar: Derived; }
>foo : Base
>new Base() : Base
>Base : typeof Base
>bar : Derived
>new Derived() : Derived
>Derived : typeof Derived

var r2 = f({ foo: new Derived(), bar: new Derived() });
>r2 : Derived
>f({ foo: new Derived(), bar: new Derived() }) : Derived
>f : <T extends Base>(x: { foo: T; bar: T; }) => T
>{ foo: new Derived(), bar: new Derived() } : { foo: Derived; bar: Derived; }
>foo : Derived
>new Derived() : Derived
>Derived : typeof Derived
>bar : Derived
>new Derived() : Derived
>Derived : typeof Derived


interface I<T> {
>I : I<T>
>T : T

    a: T;
>a : T
>T : T
}
function f2<T extends Base>(x: I<T>) {
>f2 : <T extends Base>(x: I<T>) => T
>T : T
>Base : Base
>x : I<T>
>I : I<T>
>T : T

    var r: T;
>r : T
>T : T

    return r;
>r : T
}
var i: I<Derived>;
>i : I<Derived>
>I : I<T>
>Derived : Derived

var r3 = f2(i);
>r3 : Derived
>f2(i) : Derived
>f2 : <T extends Base>(x: I<T>) => T
>i : I<Derived>


function f3<T extends Base>(x: T, y: (a: T) => T) {
>f3 : <T extends Base>(x: T, y: (a: T) => T) => T
>T : T
>Base : Base
>x : T
>T : T
>y : (a: T) => T
>a : T
>T : T
>T : T

    return y(null);
>y(null) : T
>y : (a: T) => T
>null : null
}
var r4 = f3(new Base(), x => x);
>r4 : Base
>f3(new Base(), x => x) : Base
>f3 : <T extends Base>(x: T, y: (a: T) => T) => T
>new Base() : Base
>Base : typeof Base
>x => x : (x: Base) => Base
>x : Base
>x : Base

var r5 = f3(new Derived(), x => x);
>r5 : Derived
>f3(new Derived(), x => x) : Derived
>f3 : <T extends Base>(x: T, y: (a: T) => T) => T
>new Derived() : Derived
>Derived : typeof Derived
>x => x : (x: Derived) => Derived
>x : Derived
>x : Derived

var r6 = f3(null, null); // any
>r6 : any
>f3(null, null) : any
>f3 : <T extends Base>(x: T, y: (a: T) => T) => T
>null : null
>null : null

var r7 = f3(null, x => x); // any
>r7 : any
>f3(null, x => x) : any
>f3 : <T extends Base>(x: T, y: (a: T) => T) => T
>null : null
>x => x : (x: any) => any
>x : any
>x : any