File: conditionalOperatorWithoutIdenticalBCT.types

package info (click to toggle)
node-typescript 5.0.4%2Bds1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 459,140 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (127 lines) | stat: -rw-r--r-- 2,952 bytes parent folder | download | duplicates (4)
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
=== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorWithoutIdenticalBCT.ts ===
//Cond ? Expr1 : Expr2,  Expr1 and Expr2 have no identical best common type
class X { propertyX: any; propertyX1: number; propertyX2: string };
>X : X
>propertyX : any
>propertyX1 : number
>propertyX2 : string

class A extends X { propertyA: number };
>A : A
>X : X
>propertyA : number

class B extends X { propertyB: string };
>B : B
>X : X
>propertyB : string

var x: X;
>x : X

var a: A;
>a : A

var b: B;
>b : B

// No errors anymore, uses union types
true ? a : b;
>true ? a : b : A | B
>true : true
>a : A
>b : B

var result1 = true ? a : b;
>result1 : A | B
>true ? a : b : A | B
>true : true
>a : A
>b : B

//Be contextually typed and and bct is not identical, results in errors that union type is not assignable to target
var result2: A = true ? a : b;
>result2 : A
>true ? a : b : A | B
>true : true
>a : A
>b : B

var result3: B = true ? a : b;
>result3 : B
>true ? a : b : A | B
>true : true
>a : A
>b : B

var result31: A | B = true ? a : b;
>result31 : A | B
>true ? a : b : A | B
>true : true
>a : A
>b : B

var result4: (t: X) => number = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
>result4 : (t: X) => number
>t : X
>true ? (m) => m.propertyX1 : (n) => n.propertyX2 : ((m: X) => number) | ((n: X) => string)
>true : true
>(m) => m.propertyX1 : (m: X) => number
>m : X
>m.propertyX1 : number
>m : X
>propertyX1 : number
>(n) => n.propertyX2 : (n: X) => string
>n : X
>n.propertyX2 : string
>n : X
>propertyX2 : string

var result5: (t: X) => string = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
>result5 : (t: X) => string
>t : X
>true ? (m) => m.propertyX1 : (n) => n.propertyX2 : ((m: X) => number) | ((n: X) => string)
>true : true
>(m) => m.propertyX1 : (m: X) => number
>m : X
>m.propertyX1 : number
>m : X
>propertyX1 : number
>(n) => n.propertyX2 : (n: X) => string
>n : X
>n.propertyX2 : string
>n : X
>propertyX2 : string

var result6: (t: X) => boolean = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
>result6 : (t: X) => boolean
>t : X
>true ? (m) => m.propertyX1 : (n) => n.propertyX2 : ((m: X) => number) | ((n: X) => string)
>true : true
>(m) => m.propertyX1 : (m: X) => number
>m : X
>m.propertyX1 : number
>m : X
>propertyX1 : number
>(n) => n.propertyX2 : (n: X) => string
>n : X
>n.propertyX2 : string
>n : X
>propertyX2 : string

var result61: (t: X) => number| string = true ? (m) => m.propertyX1 : (n) => n.propertyX2;
>result61 : (t: X) => number | string
>t : X
>true ? (m) => m.propertyX1 : (n) => n.propertyX2 : ((m: X) => number) | ((n: X) => string)
>true : true
>(m) => m.propertyX1 : (m: X) => number
>m : X
>m.propertyX1 : number
>m : X
>propertyX1 : number
>(n) => n.propertyX2 : (n: X) => string
>n : X
>n.propertyX2 : string
>n : X
>propertyX2 : string