1
+ import { Test } from 'nodeunit' ;
2
+ import { expectError , expectNoError } from './util' ;
3
+
4
+ export = {
5
+
6
+ // ----------------------------------------------------------------------
7
+
8
+ async 'type unions in return structs can be the same' ( test : Test ) {
9
+ await expectNoError ( test ,
10
+ `
11
+ export interface Henk {
12
+ readonly henk: string | number;
13
+ }
14
+ export class Actions {
15
+ returnHenk(): Henk { return { henk: 'henk' }; }
16
+ }
17
+ ` , `
18
+ export interface Henk {
19
+ readonly henk: string | number;
20
+ }
21
+ export class Actions {
22
+ returnHenk(): Henk { return { henk: 'henk' }; }
23
+ }
24
+ ` ) ;
25
+
26
+ test . done ( ) ;
27
+ } ,
28
+
29
+ // ----------------------------------------------------------------------
30
+
31
+ async 'type unions in return structs can be narrowed' ( test : Test ) {
32
+ await expectNoError ( test ,
33
+ `
34
+ export interface Henk {
35
+ readonly henk: string | number;
36
+ }
37
+ export class Actions {
38
+ returnHenk(): Henk { return { henk: 'henk' }; }
39
+ }
40
+ ` , `
41
+ export interface Henk {
42
+ readonly henk: string;
43
+ }
44
+ export class Actions {
45
+ returnHenk(): Henk { return { henk: 'henk' }; }
46
+ }
47
+ ` ) ;
48
+
49
+ test . done ( ) ;
50
+ } ,
51
+
52
+ // ----------------------------------------------------------------------
53
+
54
+ async 'type unions in return structs can not be widened' ( test : Test ) {
55
+ await expectError ( test ,
56
+ / s o m e o f s t r i n g \| n u m b e r \| b o o l e a n a r e n o t a s s i g n a b l e t o s t r i n g \| n u m b e r / ,
57
+ `
58
+ export interface Henk {
59
+ readonly henk: string | number;
60
+ }
61
+ export class Actions {
62
+ returnHenk(): Henk { return { henk: 'henk' }; }
63
+ }
64
+ ` , `
65
+ export interface Henk {
66
+ readonly henk: string | number | boolean;
67
+ }
68
+ export class Actions {
69
+ returnHenk(): Henk { return { henk: 'henk' }; }
70
+ }
71
+ ` ) ;
72
+
73
+ test . done ( ) ;
74
+ } ,
75
+
76
+ // ----------------------------------------------------------------------
77
+
78
+ async 'type unions in input structs can be the same' ( test : Test ) {
79
+ await expectNoError ( test ,
80
+ `
81
+ export interface Henk {
82
+ readonly henk: string | number;
83
+ }
84
+ export class Actions {
85
+ takeHenk(_henk: Henk): void { }
86
+ }
87
+ ` , `
88
+ export interface Henk {
89
+ readonly henk: string | number;
90
+ }
91
+ export class Actions {
92
+ takeHenk(_henk: Henk): void { }
93
+ }
94
+ ` ) ;
95
+
96
+ test . done ( ) ;
97
+ } ,
98
+
99
+ // ----------------------------------------------------------------------
100
+
101
+ async 'type unions in input structs can be widened' ( test : Test ) {
102
+ await expectNoError ( test ,
103
+ `
104
+ export interface Henk {
105
+ readonly henk: string | number;
106
+ }
107
+ export class Actions {
108
+ takeHenk(_henk: Henk): void { }
109
+ }
110
+ ` , `
111
+ export interface Henk {
112
+ readonly henk: string | number | boolean;
113
+ }
114
+ export class Actions {
115
+ takeHenk(_henk: Henk): void { }
116
+ }
117
+ ` ) ;
118
+
119
+ test . done ( ) ;
120
+ } ,
121
+
122
+ // ----------------------------------------------------------------------
123
+
124
+ async 'type unions in input structs can not be narrowed' ( test : Test ) {
125
+ await expectError ( test ,
126
+ / s t r i n g \| n u m b e r i s n o t a s s i g n a b l e t o s t r i n g / ,
127
+ `
128
+ export interface Henk {
129
+ readonly henk: string | number;
130
+ }
131
+ export class Actions {
132
+ takeHenk(_henk: Henk): void { }
133
+ }
134
+ ` , `
135
+ export interface Henk {
136
+ readonly henk: string;
137
+ }
138
+ export class Actions {
139
+ takeHenk(_henk: Henk): void { }
140
+ }
141
+ ` ) ;
142
+
143
+ test . done ( ) ;
144
+ } ,
145
+ } ;
0 commit comments