diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2ff45ee0b73..ce71f190131 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -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(-(node.operand).text)); } + if (isOperandNumericLiteral && node.operator === SyntaxKind.PlusToken) { + return getFreshTypeOfLiteralType(getLiteralType(+(node.operand).text)); + } switch (node.operator) { case SyntaxKind.PlusToken: case SyntaxKind.MinusToken: diff --git a/tests/baselines/reference/emitExponentiationOperator3.types b/tests/baselines/reference/emitExponentiationOperator3.types index 2fe95d4db8f..666d46dca39 100644 --- a/tests/baselines/reference/emitExponentiationOperator3.types +++ b/tests/baselines/reference/emitExponentiationOperator3.types @@ -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 diff --git a/tests/baselines/reference/enumClassification.types b/tests/baselines/reference/enumClassification.types index d0581c7fcae..73c8041a6b7 100644 --- a/tests/baselines/reference/enumClassification.types +++ b/tests/baselines/reference/enumClassification.types @@ -131,7 +131,7 @@ enum E11 { A = +0, >A : E11 ->+0 : number +>+0 : 0 >0 : 0 B, diff --git a/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.js b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.js new file mode 100644 index 00000000000..63f1f42d101 --- /dev/null +++ b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.js @@ -0,0 +1,8 @@ +//// [prefixedNumberLiteralAssignToNumberLiteralType.ts] +let x: 1 = +1; + +let y: -1 = -1; + +//// [prefixedNumberLiteralAssignToNumberLiteralType.js] +var x = +1; +var y = -1; diff --git a/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.symbols b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.symbols new file mode 100644 index 00000000000..4ab5d371e8a --- /dev/null +++ b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.symbols @@ -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)) + diff --git a/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.types b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.types new file mode 100644 index 00000000000..93bd5cc6274 --- /dev/null +++ b/tests/baselines/reference/prefixedNumberLiteralAssignToNumberLiteralType.types @@ -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 + diff --git a/tests/baselines/reference/unaryPlus.types b/tests/baselines/reference/unaryPlus.types index 8f92b51a159..9bd741f2ad1 100644 --- a/tests/baselines/reference/unaryPlus.types +++ b/tests/baselines/reference/unaryPlus.types @@ -2,7 +2,7 @@ // allowed per spec var a = +1; >a : number ->+1 : number +>+1 : 1 >1 : 1 var b = +(""); diff --git a/tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts b/tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts new file mode 100644 index 00000000000..6c2afbba2bd --- /dev/null +++ b/tests/cases/compiler/prefixedNumberLiteralAssignToNumberLiteralType.ts @@ -0,0 +1,3 @@ +let x: 1 = +1; + +let y: -1 = -1; \ No newline at end of file