File: typeAssertions.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 (162 lines) | stat: -rw-r--r-- 3,852 bytes parent folder | download | duplicates (3)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
=== tests/cases/conformance/expressions/typeAssertions/typeAssertions.ts ===
// Function call whose argument is a 1 arg generic function call with explicit type arguments
function fn1<T>(t: T) { }
>fn1 : <T>(t: T) => void
>t : T

function fn2(t: any) { }
>fn2 : (t: any) => void
>t : any

fn1(fn2<string>(4)); // Error
>fn1(fn2<string>(4)) : void
>fn1 : <T>(t: T) => void
>fn2<string>(4) : void
>fn2 : (t: any) => void
>4 : 4

var a: any;
>a : any

var s: string;
>s : string

// Type assertion of non - unary expression
var a = <any>"" + 4;
>a : any
><any>"" + 4 : any
><any>"" : any
>"" : ""
>4 : 4

var s = "" + <any>4;
>s : string
>"" + <any>4 : string
>"" : ""
><any>4 : any
>4 : 4

class SomeBase {
>SomeBase : SomeBase

    private p;
>p : any
}
class SomeDerived extends SomeBase {
>SomeDerived : SomeDerived
>SomeBase : SomeBase

    private x;
>x : any
}
class SomeOther {
>SomeOther : SomeOther

    private q;
>q : any
}

// Type assertion should check for assignability in either direction
var someBase = new SomeBase();
>someBase : SomeBase
>new SomeBase() : SomeBase
>SomeBase : typeof SomeBase

var someDerived = new SomeDerived();
>someDerived : SomeDerived
>new SomeDerived() : SomeDerived
>SomeDerived : typeof SomeDerived

var someOther = new SomeOther();
>someOther : SomeOther
>new SomeOther() : SomeOther
>SomeOther : typeof SomeOther

someBase = <SomeBase>someDerived;
>someBase = <SomeBase>someDerived : SomeBase
>someBase : SomeBase
><SomeBase>someDerived : SomeBase
>someDerived : SomeDerived

someBase = <SomeBase>someBase;
>someBase = <SomeBase>someBase : SomeBase
>someBase : SomeBase
><SomeBase>someBase : SomeBase
>someBase : SomeBase

someBase = <SomeBase>someOther; // Error
>someBase = <SomeBase>someOther : SomeBase
>someBase : SomeBase
><SomeBase>someOther : SomeBase
>someOther : SomeOther

someDerived = <SomeDerived>someDerived;
>someDerived = <SomeDerived>someDerived : SomeDerived
>someDerived : SomeDerived
><SomeDerived>someDerived : SomeDerived
>someDerived : SomeDerived

someDerived = <SomeDerived>someBase;
>someDerived = <SomeDerived>someBase : SomeDerived
>someDerived : SomeDerived
><SomeDerived>someBase : SomeDerived
>someBase : SomeBase

someDerived = <SomeDerived>someOther; // Error
>someDerived = <SomeDerived>someOther : SomeDerived
>someDerived : SomeDerived
><SomeDerived>someOther : SomeDerived
>someOther : SomeOther

someOther = <SomeOther>someDerived; // Error
>someOther = <SomeOther>someDerived : SomeOther
>someOther : SomeOther
><SomeOther>someDerived : SomeOther
>someDerived : SomeDerived

someOther = <SomeOther>someBase; // Error
>someOther = <SomeOther>someBase : SomeOther
>someOther : SomeOther
><SomeOther>someBase : SomeOther
>someBase : SomeBase

someOther = <SomeOther>someOther;
>someOther = <SomeOther>someOther : SomeOther
>someOther : SomeOther
><SomeOther>someOther : SomeOther
>someOther : SomeOther

// Type assertion cannot be a type-predicate type
var numOrStr: number | string;
>numOrStr : string | number

var str: string;
>str : string

if(<numOrStr is string>(numOrStr === undefined)) { // Error
><numOrStr is : numOrStr
>is : any
>string>(numOrStr === undefined) : boolean
>string : any
>(numOrStr === undefined) : boolean
>numOrStr === undefined : boolean
>numOrStr : string | number
>undefined : undefined

	str = numOrStr; // Error, no narrowing occurred
>str = numOrStr : string | number
>str : string
>numOrStr : string | number
}

if((numOrStr === undefined) as numOrStr is string) { // Error
>(numOrStr === undefined) as numOrStr : numOrStr
>(numOrStr === undefined) : boolean
>numOrStr === undefined : boolean
>numOrStr : string | number
>undefined : undefined
>is : any
>string : any
}