Skip to content

Commit 7cf595a

Browse files
committed
Test removing undefined from initialized, annotated parameters
1 parent a235d54 commit 7cf595a

4 files changed

+124
-21
lines changed

tests/baselines/reference/defaultParameterAddsUndefinedWithStrictNullChecks.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,24 @@ function foo1(x: string = "string", b: number) {
1313
}
1414

1515
function foo2(x = "string", b: number) {
16-
x.length;
16+
x.length; // ok, should be string
17+
}
18+
19+
function foo3(x: string | undefined = "string", b: number) {
20+
x.length; // ok, should be string
1721
}
1822

19-
// .d.ts should have `T | undefined` for foo1 and foo2
23+
function foo4(x: string | undefined = undefined, b: number) {
24+
x; // should be string | undefined
25+
}
26+
27+
28+
29+
// .d.ts should have `string | undefined` for foo1, foo2, foo3 and foo4
2030
foo1(undefined, 1);
2131
foo2(undefined, 1);
32+
foo3(undefined, 1);
33+
foo4(undefined, 1);
2234

2335

2436
function removeUndefinedButNotFalse(x = true) {
@@ -55,11 +67,21 @@ function foo1(x, b) {
5567
}
5668
function foo2(x, b) {
5769
if (x === void 0) { x = "string"; }
58-
x.length;
70+
x.length; // ok, should be string
71+
}
72+
function foo3(x, b) {
73+
if (x === void 0) { x = "string"; }
74+
x.length; // ok, should be string
75+
}
76+
function foo4(x, b) {
77+
if (x === void 0) { x = undefined; }
78+
x; // should be string | undefined
5979
}
60-
// .d.ts should have `T | undefined` for foo1 and foo2
80+
// .d.ts should have `string | undefined` for foo1, foo2, foo3 and foo4
6181
foo1(undefined, 1);
6282
foo2(undefined, 1);
83+
foo3(undefined, 1);
84+
foo4(undefined, 1);
6385
function removeUndefinedButNotFalse(x) {
6486
if (x === void 0) { x = true; }
6587
if (x === false) {
@@ -83,6 +105,8 @@ declare function g(addUndefined: string | undefined, addDefined: number): number
83105
declare let total: number;
84106
declare function foo1(x: string | undefined, b: number): void;
85107
declare function foo2(x: string | undefined, b: number): void;
108+
declare function foo3(x: string | undefined, b: number): void;
109+
declare function foo4(x: string | undefined, b: number): void;
86110
declare function removeUndefinedButNotFalse(x?: boolean | undefined): false | undefined;
87111
declare const cond: boolean;
88112
declare function removeNothing(y?: boolean | undefined): boolean;

tests/baselines/reference/defaultParameterAddsUndefinedWithStrictNullChecks.symbols

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,36 @@ function foo2(x = "string", b: number) {
5151
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 13, 14))
5252
>b : Symbol(b, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 13, 27))
5353

54-
x.length;
54+
x.length; // ok, should be string
5555
>x.length : Symbol(String.length, Decl(lib.d.ts, --, --))
5656
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 13, 14))
5757
>length : Symbol(String.length, Decl(lib.d.ts, --, --))
5858
}
5959

60-
// .d.ts should have `T | undefined` for foo1 and foo2
60+
function foo3(x: string | undefined = "string", b: number) {
61+
>foo3 : Symbol(foo3, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 15, 1))
62+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 17, 14))
63+
>b : Symbol(b, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 17, 47))
64+
65+
x.length; // ok, should be string
66+
>x.length : Symbol(String.length, Decl(lib.d.ts, --, --))
67+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 17, 14))
68+
>length : Symbol(String.length, Decl(lib.d.ts, --, --))
69+
}
70+
71+
function foo4(x: string | undefined = undefined, b: number) {
72+
>foo4 : Symbol(foo4, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 19, 1))
73+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 21, 14))
74+
>undefined : Symbol(undefined)
75+
>b : Symbol(b, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 21, 48))
76+
77+
x; // should be string | undefined
78+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 21, 14))
79+
}
80+
81+
82+
83+
// .d.ts should have `string | undefined` for foo1, foo2, foo3 and foo4
6184
foo1(undefined, 1);
6285
>foo1 : Symbol(foo1, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 7, 36))
6386
>undefined : Symbol(undefined)
@@ -66,37 +89,45 @@ foo2(undefined, 1);
6689
>foo2 : Symbol(foo2, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 11, 1))
6790
>undefined : Symbol(undefined)
6891

92+
foo3(undefined, 1);
93+
>foo3 : Symbol(foo3, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 15, 1))
94+
>undefined : Symbol(undefined)
95+
96+
foo4(undefined, 1);
97+
>foo4 : Symbol(foo4, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 19, 1))
98+
>undefined : Symbol(undefined)
99+
69100

70101
function removeUndefinedButNotFalse(x = true) {
71-
>removeUndefinedButNotFalse : Symbol(removeUndefinedButNotFalse, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 19, 19))
72-
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 22, 36))
102+
>removeUndefinedButNotFalse : Symbol(removeUndefinedButNotFalse, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 31, 19))
103+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 34, 36))
73104

74105
if (x === false) {
75-
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 22, 36))
106+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 34, 36))
76107

77108
return x;
78-
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 22, 36))
109+
>x : Symbol(x, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 34, 36))
79110
}
80111
}
81112

82113
declare const cond: boolean;
83-
>cond : Symbol(cond, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 28, 13))
114+
>cond : Symbol(cond, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 40, 13))
84115

85116
function removeNothing(y = cond ? true : undefined) {
86-
>removeNothing : Symbol(removeNothing, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 28, 28))
87-
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 29, 23))
88-
>cond : Symbol(cond, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 28, 13))
117+
>removeNothing : Symbol(removeNothing, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 40, 28))
118+
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 41, 23))
119+
>cond : Symbol(cond, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 40, 13))
89120
>undefined : Symbol(undefined)
90121

91122
if (y !== undefined) {
92-
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 29, 23))
123+
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 41, 23))
93124
>undefined : Symbol(undefined)
94125

95126
if (y === false) {
96-
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 29, 23))
127+
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 41, 23))
97128

98129
return y;
99-
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 29, 23))
130+
>y : Symbol(y, Decl(defaultParameterAddsUndefinedWithStrictNullChecks.ts, 41, 23))
100131
}
101132
}
102133
return true;

tests/baselines/reference/defaultParameterAddsUndefinedWithStrictNullChecks.types

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,37 @@ function foo2(x = "string", b: number) {
7878
>"string" : "string"
7979
>b : number
8080

81-
x.length;
81+
x.length; // ok, should be string
82+
>x.length : number
83+
>x : string
84+
>length : number
85+
}
86+
87+
function foo3(x: string | undefined = "string", b: number) {
88+
>foo3 : (x: string | undefined, b: number) => void
89+
>x : string
90+
>"string" : "string"
91+
>b : number
92+
93+
x.length; // ok, should be string
8294
>x.length : number
8395
>x : string
8496
>length : number
8597
}
8698

87-
// .d.ts should have `T | undefined` for foo1 and foo2
99+
function foo4(x: string | undefined = undefined, b: number) {
100+
>foo4 : (x: string | undefined, b: number) => void
101+
>x : string | undefined
102+
>undefined : undefined
103+
>b : number
104+
105+
x; // should be string | undefined
106+
>x : string | undefined
107+
}
108+
109+
110+
111+
// .d.ts should have `string | undefined` for foo1, foo2, foo3 and foo4
88112
foo1(undefined, 1);
89113
>foo1(undefined, 1) : void
90114
>foo1 : (x: string | undefined, b: number) => void
@@ -97,6 +121,18 @@ foo2(undefined, 1);
97121
>undefined : undefined
98122
>1 : 1
99123

124+
foo3(undefined, 1);
125+
>foo3(undefined, 1) : void
126+
>foo3 : (x: string | undefined, b: number) => void
127+
>undefined : undefined
128+
>1 : 1
129+
130+
foo4(undefined, 1);
131+
>foo4(undefined, 1) : void
132+
>foo4 : (x: string | undefined, b: number) => void
133+
>undefined : undefined
134+
>1 : 1
135+
100136

101137
function removeUndefinedButNotFalse(x = true) {
102138
>removeUndefinedButNotFalse : (x?: boolean | undefined) => false | undefined

tests/cases/compiler/defaultParameterAddsUndefinedWithStrictNullChecks.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,24 @@ function foo1(x: string = "string", b: number) {
1414
}
1515

1616
function foo2(x = "string", b: number) {
17-
x.length;
17+
x.length; // ok, should be string
18+
}
19+
20+
function foo3(x: string | undefined = "string", b: number) {
21+
x.length; // ok, should be string
1822
}
1923

20-
// .d.ts should have `T | undefined` for foo1 and foo2
24+
function foo4(x: string | undefined = undefined, b: number) {
25+
x; // should be string | undefined
26+
}
27+
28+
29+
30+
// .d.ts should have `string | undefined` for foo1, foo2, foo3 and foo4
2131
foo1(undefined, 1);
2232
foo2(undefined, 1);
33+
foo3(undefined, 1);
34+
foo4(undefined, 1);
2335

2436

2537
function removeUndefinedButNotFalse(x = true) {

0 commit comments

Comments
 (0)