Skip to content

Commit 1552761

Browse files
Merge pull request #17425 from ikatyang/fix-17392
Retain literal type for prefix plus on number literal
2 parents c06a30a + 072884a commit 1552761

8 files changed

+56
-20
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16970,8 +16970,13 @@ namespace ts {
1697016970
if (operandType === silentNeverType) {
1697116971
return silentNeverType;
1697216972
}
16973-
if (node.operator === SyntaxKind.MinusToken && node.operand.kind === SyntaxKind.NumericLiteral) {
16974-
return getFreshTypeOfLiteralType(getLiteralType(-(<LiteralExpression>node.operand).text));
16973+
if (node.operand.kind === SyntaxKind.NumericLiteral) {
16974+
if (node.operator === SyntaxKind.MinusToken) {
16975+
return getFreshTypeOfLiteralType(getLiteralType(-(<LiteralExpression>node.operand).text));
16976+
}
16977+
else if (node.operator === SyntaxKind.PlusToken) {
16978+
return getFreshTypeOfLiteralType(getLiteralType(+(<LiteralExpression>node.operand).text));
16979+
}
1697516980
}
1697616981
switch (node.operator) {
1697716982
case SyntaxKind.PlusToken:

tests/baselines/reference/emitExponentiationOperator3.types

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,32 +113,32 @@ var temp = 10;
113113

114114
(+3) ** temp++;
115115
>(+3) ** temp++ : number
116-
>(+3) : number
117-
>+3 : number
116+
>(+3) : 3
117+
>+3 : 3
118118
>3 : 3
119119
>temp++ : number
120120
>temp : number
121121

122122
(+3) ** temp--;
123123
>(+3) ** temp-- : number
124-
>(+3) : number
125-
>+3 : number
124+
>(+3) : 3
125+
>+3 : 3
126126
>3 : 3
127127
>temp-- : number
128128
>temp : number
129129

130130
(+3) ** ++temp;
131131
>(+3) ** ++temp : number
132-
>(+3) : number
133-
>+3 : number
132+
>(+3) : 3
133+
>+3 : 3
134134
>3 : 3
135135
>++temp : number
136136
>temp : number
137137

138138
(+3) ** --temp;
139139
>(+3) ** --temp : number
140-
>(+3) : number
141-
>+3 : number
140+
>(+3) : 3
141+
>+3 : 3
142142
>3 : 3
143143
>--temp : number
144144
>temp : number
@@ -185,8 +185,8 @@ var temp = 10;
185185

186186
(+3) ** temp++ ** 2;
187187
>(+3) ** temp++ ** 2 : number
188-
>(+3) : number
189-
>+3 : number
188+
>(+3) : 3
189+
>+3 : 3
190190
>3 : 3
191191
>temp++ ** 2 : number
192192
>temp++ : number
@@ -195,8 +195,8 @@ var temp = 10;
195195

196196
(+3) ** temp-- ** 2;
197197
>(+3) ** temp-- ** 2 : number
198-
>(+3) : number
199-
>+3 : number
198+
>(+3) : 3
199+
>+3 : 3
200200
>3 : 3
201201
>temp-- ** 2 : number
202202
>temp-- : number
@@ -205,8 +205,8 @@ var temp = 10;
205205

206206
(+3) ** ++temp ** 2;
207207
>(+3) ** ++temp ** 2 : number
208-
>(+3) : number
209-
>+3 : number
208+
>(+3) : 3
209+
>+3 : 3
210210
>3 : 3
211211
>++temp ** 2 : number
212212
>++temp : number
@@ -215,8 +215,8 @@ var temp = 10;
215215

216216
(+3) ** --temp ** 2;
217217
>(+3) ** --temp ** 2 : number
218-
>(+3) : number
219-
>+3 : number
218+
>(+3) : 3
219+
>+3 : 3
220220
>3 : 3
221221
>--temp ** 2 : number
222222
>--temp : number

tests/baselines/reference/enumClassification.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ enum E11 {
131131

132132
A = +0,
133133
>A : E11
134-
>+0 : number
134+
>+0 : 0
135135
>0 : 0
136136

137137
B,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//// [prefixedNumberLiteralAssignToNumberLiteralType.ts]
2+
let x: 1 = +1;
3+
4+
let y: -1 = -1;
5+
6+
//// [prefixedNumberLiteralAssignToNumberLiteralType.js]
7+
var x = +1;
8+
var y = -1;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
=== tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts ===
2+
let x: 1 = +1;
3+
>x : Symbol(x, Decl(prefixedNumberLiteralAssignToNumberLiteralType.ts, 0, 3))
4+
5+
let y: -1 = -1;
6+
>y : Symbol(y, Decl(prefixedNumberLiteralAssignToNumberLiteralType.ts, 2, 3))
7+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
=== tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts ===
2+
let x: 1 = +1;
3+
>x : 1
4+
>+1 : 1
5+
>1 : 1
6+
7+
let y: -1 = -1;
8+
>y : -1
9+
>-1 : -1
10+
>1 : 1
11+
>-1 : -1
12+
>1 : 1
13+

tests/baselines/reference/unaryPlus.types

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// allowed per spec
33
var a = +1;
44
>a : number
5-
>+1 : number
5+
>+1 : 1
66
>1 : 1
77

88
var b = +(<any>"");
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
let x: 1 = +1;
2+
3+
let y: -1 = -1;

0 commit comments

Comments
 (0)