Merge pull request #17425 from ikatyang/fix-17392
Retain literal type for prefix plus on number literal
This commit is contained in:
commit
1552761982
|
@ -16970,8 +16970,13 @@ namespace ts {
|
||||||
if (operandType === silentNeverType) {
|
if (operandType === silentNeverType) {
|
||||||
return silentNeverType;
|
return silentNeverType;
|
||||||
}
|
}
|
||||||
if (node.operator === SyntaxKind.MinusToken && node.operand.kind === SyntaxKind.NumericLiteral) {
|
if (node.operand.kind === SyntaxKind.NumericLiteral) {
|
||||||
return getFreshTypeOfLiteralType(getLiteralType(-(<LiteralExpression>node.operand).text));
|
if (node.operator === SyntaxKind.MinusToken) {
|
||||||
|
return getFreshTypeOfLiteralType(getLiteralType(-(<LiteralExpression>node.operand).text));
|
||||||
|
}
|
||||||
|
else if (node.operator === SyntaxKind.PlusToken) {
|
||||||
|
return getFreshTypeOfLiteralType(getLiteralType(+(<LiteralExpression>node.operand).text));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
switch (node.operator) {
|
switch (node.operator) {
|
||||||
case SyntaxKind.PlusToken:
|
case SyntaxKind.PlusToken:
|
||||||
|
|
|
@ -113,32 +113,32 @@ var temp = 10;
|
||||||
|
|
||||||
(+3) ** temp++;
|
(+3) ** temp++;
|
||||||
>(+3) ** temp++ : number
|
>(+3) ** temp++ : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>temp++ : number
|
>temp++ : number
|
||||||
>temp : number
|
>temp : number
|
||||||
|
|
||||||
(+3) ** temp--;
|
(+3) ** temp--;
|
||||||
>(+3) ** temp-- : number
|
>(+3) ** temp-- : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>temp-- : number
|
>temp-- : number
|
||||||
>temp : number
|
>temp : number
|
||||||
|
|
||||||
(+3) ** ++temp;
|
(+3) ** ++temp;
|
||||||
>(+3) ** ++temp : number
|
>(+3) ** ++temp : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>++temp : number
|
>++temp : number
|
||||||
>temp : number
|
>temp : number
|
||||||
|
|
||||||
(+3) ** --temp;
|
(+3) ** --temp;
|
||||||
>(+3) ** --temp : number
|
>(+3) ** --temp : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>--temp : number
|
>--temp : number
|
||||||
>temp : number
|
>temp : number
|
||||||
|
@ -185,8 +185,8 @@ var temp = 10;
|
||||||
|
|
||||||
(+3) ** temp++ ** 2;
|
(+3) ** temp++ ** 2;
|
||||||
>(+3) ** temp++ ** 2 : number
|
>(+3) ** temp++ ** 2 : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>temp++ ** 2 : number
|
>temp++ ** 2 : number
|
||||||
>temp++ : number
|
>temp++ : number
|
||||||
|
@ -195,8 +195,8 @@ var temp = 10;
|
||||||
|
|
||||||
(+3) ** temp-- ** 2;
|
(+3) ** temp-- ** 2;
|
||||||
>(+3) ** temp-- ** 2 : number
|
>(+3) ** temp-- ** 2 : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>temp-- ** 2 : number
|
>temp-- ** 2 : number
|
||||||
>temp-- : number
|
>temp-- : number
|
||||||
|
@ -205,8 +205,8 @@ var temp = 10;
|
||||||
|
|
||||||
(+3) ** ++temp ** 2;
|
(+3) ** ++temp ** 2;
|
||||||
>(+3) ** ++temp ** 2 : number
|
>(+3) ** ++temp ** 2 : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>++temp ** 2 : number
|
>++temp ** 2 : number
|
||||||
>++temp : number
|
>++temp : number
|
||||||
|
@ -215,8 +215,8 @@ var temp = 10;
|
||||||
|
|
||||||
(+3) ** --temp ** 2;
|
(+3) ** --temp ** 2;
|
||||||
>(+3) ** --temp ** 2 : number
|
>(+3) ** --temp ** 2 : number
|
||||||
>(+3) : number
|
>(+3) : 3
|
||||||
>+3 : number
|
>+3 : 3
|
||||||
>3 : 3
|
>3 : 3
|
||||||
>--temp ** 2 : number
|
>--temp ** 2 : number
|
||||||
>--temp : number
|
>--temp : number
|
||||||
|
|
|
@ -131,7 +131,7 @@ enum E11 {
|
||||||
|
|
||||||
A = +0,
|
A = +0,
|
||||||
>A : E11
|
>A : E11
|
||||||
>+0 : number
|
>+0 : 0
|
||||||
>0 : 0
|
>0 : 0
|
||||||
|
|
||||||
B,
|
B,
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
//// [prefixedNumberLiteralAssignToNumberLiteralType.ts]
|
||||||
|
let x: 1 = +1;
|
||||||
|
|
||||||
|
let y: -1 = -1;
|
||||||
|
|
||||||
|
//// [prefixedNumberLiteralAssignToNumberLiteralType.js]
|
||||||
|
var x = +1;
|
||||||
|
var y = -1;
|
|
@ -0,0 +1,7 @@
|
||||||
|
=== tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts ===
|
||||||
|
let x: 1 = +1;
|
||||||
|
>x : Symbol(x, Decl(prefixedNumberLiteralAssignToNumberLiteralType.ts, 0, 3))
|
||||||
|
|
||||||
|
let y: -1 = -1;
|
||||||
|
>y : Symbol(y, Decl(prefixedNumberLiteralAssignToNumberLiteralType.ts, 2, 3))
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
=== tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts ===
|
||||||
|
let x: 1 = +1;
|
||||||
|
>x : 1
|
||||||
|
>+1 : 1
|
||||||
|
>1 : 1
|
||||||
|
|
||||||
|
let y: -1 = -1;
|
||||||
|
>y : -1
|
||||||
|
>-1 : -1
|
||||||
|
>1 : 1
|
||||||
|
>-1 : -1
|
||||||
|
>1 : 1
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// allowed per spec
|
// allowed per spec
|
||||||
var a = +1;
|
var a = +1;
|
||||||
>a : number
|
>a : number
|
||||||
>+1 : number
|
>+1 : 1
|
||||||
>1 : 1
|
>1 : 1
|
||||||
|
|
||||||
var b = +(<any>"");
|
var b = +(<any>"");
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
let x: 1 = +1;
|
||||||
|
|
||||||
|
let y: -1 = -1;
|
Loading…
Reference in a new issue