Retain literal type for prefix plus on number literal

This commit is contained in:
ikatyang 2017-07-26 14:39:26 +08:00
parent f667357aad
commit eee6851911
8 changed files with 54 additions and 19 deletions

View File

@ -16952,9 +16952,13 @@ namespace ts {
if (operandType === silentNeverType) {
return silentNeverType;
}
if (node.operator === SyntaxKind.MinusToken && node.operand.kind === SyntaxKind.NumericLiteral) {
const isOperandNumericLiteral = node.operand.kind === SyntaxKind.NumericLiteral;
if (isOperandNumericLiteral && node.operator === SyntaxKind.MinusToken) {
return getFreshTypeOfLiteralType(getLiteralType(-(<LiteralExpression>node.operand).text));
}
if (isOperandNumericLiteral && node.operator === SyntaxKind.PlusToken) {
return getFreshTypeOfLiteralType(getLiteralType(+(<LiteralExpression>node.operand).text));
}
switch (node.operator) {
case SyntaxKind.PlusToken:
case SyntaxKind.MinusToken:

View File

@ -113,32 +113,32 @@ var temp = 10;
(+3) ** temp++;
>(+3) ** temp++ : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>temp++ : number
>temp : number
(+3) ** temp--;
>(+3) ** temp-- : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>temp-- : number
>temp : number
(+3) ** ++temp;
>(+3) ** ++temp : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>++temp : number
>temp : number
(+3) ** --temp;
>(+3) ** --temp : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>--temp : number
>temp : number
@ -185,8 +185,8 @@ var temp = 10;
(+3) ** temp++ ** 2;
>(+3) ** temp++ ** 2 : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>temp++ ** 2 : number
>temp++ : number
@ -195,8 +195,8 @@ var temp = 10;
(+3) ** temp-- ** 2;
>(+3) ** temp-- ** 2 : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>temp-- ** 2 : number
>temp-- : number
@ -205,8 +205,8 @@ var temp = 10;
(+3) ** ++temp ** 2;
>(+3) ** ++temp ** 2 : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>++temp ** 2 : number
>++temp : number
@ -215,8 +215,8 @@ var temp = 10;
(+3) ** --temp ** 2;
>(+3) ** --temp ** 2 : number
>(+3) : number
>+3 : number
>(+3) : 3
>+3 : 3
>3 : 3
>--temp ** 2 : number
>--temp : number

View File

@ -131,7 +131,7 @@ enum E11 {
A = +0,
>A : E11
>+0 : number
>+0 : 0
>0 : 0
B,

View File

@ -0,0 +1,8 @@
//// [prefixedNumberLiteralAssignToNumberLiteralType.ts]
let x: 1 = +1;
let y: -1 = -1;
//// [prefixedNumberLiteralAssignToNumberLiteralType.js]
var x = +1;
var y = -1;

View File

@ -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))

View File

@ -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

View File

@ -2,7 +2,7 @@
// allowed per spec
var a = +1;
>a : number
>+1 : number
>+1 : 1
>1 : 1
var b = +(<any>"");

View File

@ -0,0 +1,3 @@
let x: 1 = +1;
let y: -1 = -1;