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