File: bestCommonTypeOfConditionalExpressions.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 (131 lines) | stat: -rw-r--r-- 3,228 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
=== tests/cases/conformance/types/typeRelationships/bestCommonType/bestCommonTypeOfConditionalExpressions.ts ===
// conditional expressions return the best common type of the branches plus contextual type (using the first candidate if multiple BCTs exist)
// no errors expected here

var a: { x: number; y?: number };
>a : { x: number; y?: number; }
>x : number
>y : number

var b: { x: number; z?: number };
>b : { x: number; z?: number; }
>x : number
>z : number

class Base { foo: string; }
>Base : Base
>foo : string

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

class Derived2 extends Base { baz: string; }
>Derived2 : Derived2
>Base : Base
>baz : string

var base: Base;
>base : Base
>Base : Base

var derived: Derived;
>derived : Derived
>Derived : Derived

var derived2: Derived2;
>derived2 : Derived2
>Derived2 : Derived2

var r = true ? 1 : 2;
>r : number
>true ? 1 : 2 : 1 | 2
>true : true
>1 : 1
>2 : 2

var r3 = true ? 1 : {};
>r3 : {}
>true ? 1 : {} : {}
>true : true
>1 : 1
>{} : {}

var r4 = true ? a : b; // typeof a
>r4 : { x: number; y?: number; } | { x: number; z?: number; }
>true ? a : b : { x: number; y?: number; } | { x: number; z?: number; }
>true : true
>a : { x: number; y?: number; }
>b : { x: number; z?: number; }

var r5 = true ? b : a; // typeof b
>r5 : { x: number; y?: number; } | { x: number; z?: number; }
>true ? b : a : { x: number; y?: number; } | { x: number; z?: number; }
>true : true
>b : { x: number; z?: number; }
>a : { x: number; y?: number; }

var r6 = true ? (x: number) => { } : (x: Object) => { }; // returns number => void
>r6 : (x: number) => void
>true ? (x: number) => { } : (x: Object) => { } : (x: number) => void
>true : true
>(x: number) => { } : (x: number) => void
>x : number
>(x: Object) => { } : (x: Object) => void
>x : Object
>Object : Object

var r7: (x: Object) => void = true ? (x: number) => { } : (x: Object) => { }; 
>r7 : (x: Object) => void
>x : Object
>Object : Object
>true ? (x: number) => { } : (x: Object) => { } : (x: number) => void
>true : true
>(x: number) => { } : (x: number) => void
>x : number
>(x: Object) => { } : (x: Object) => void
>x : Object
>Object : Object

var r8 = true ? (x: Object) => { } : (x: number) => { }; // returns Object => void
>r8 : (x: Object) => void
>true ? (x: Object) => { } : (x: number) => { } : (x: Object) => void
>true : true
>(x: Object) => { } : (x: Object) => void
>x : Object
>Object : Object
>(x: number) => { } : (x: number) => void
>x : number

var r10: Base = true ? derived : derived2; // no error since we use the contextual type in BCT
>r10 : Base
>Base : Base
>true ? derived : derived2 : Derived | Derived2
>true : true
>derived : Derived
>derived2 : Derived2

var r11 = true ? base : derived2;
>r11 : Base
>true ? base : derived2 : Base
>true : true
>base : Base
>derived2 : Derived2

function foo5<T, U>(t: T, u: U): Object {
>foo5 : <T, U>(t: T, u: U) => Object
>T : T
>U : U
>t : T
>T : T
>u : U
>U : U
>Object : Object

    return true ? t : u; // BCT is Object
>true ? t : u : T | U
>true : true
>t : T
>u : U
}