mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-10 21:07:52 -05:00
Raise literal type to its base in a comparison
Similar to ===, except that it always applies, even when comparing two literals.
This commit is contained in:
@@ -14241,6 +14241,8 @@ namespace ts {
|
||||
case SyntaxKind.LessThanEqualsToken:
|
||||
case SyntaxKind.GreaterThanEqualsToken:
|
||||
if (checkForDisallowedESSymbolOperand(operator)) {
|
||||
leftType = getBaseTypeOfLiteralType(leftType);
|
||||
rightType = getBaseTypeOfLiteralType(rightType);
|
||||
if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) {
|
||||
reportOperatorError();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(5,14): error TS2365: Operator '<' cannot be applied to types 'number' and 'boolean'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(6,14): error TS2365: Operator '<=' cannot be applied to types 'number' and 'boolean'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(7,14): error TS2365: Operator '>=' cannot be applied to types 'number' and 'boolean'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(8,14): error TS2365: Operator '>' cannot be applied to types 'number' and 'boolean'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(9,14): error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(10,14): error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
|
||||
tests/cases/compiler/relationalOperatorComparable.ts(11,14): error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/relationalOperatorComparable.ts (7 errors) ====
|
||||
function f(onethree: 1 | 3, two: 2) {
|
||||
const t = true;
|
||||
const f = false;
|
||||
let a1 = onethree < two; // ok
|
||||
let a2 = onethree < true; // error, number and boolean
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '<' cannot be applied to types 'number' and 'boolean'.
|
||||
let a3 = onethree <= false; // error, number and boolean
|
||||
~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '<=' cannot be applied to types 'number' and 'boolean'.
|
||||
let a4 = onethree >= t; // error, number and boolean
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '>=' cannot be applied to types 'number' and 'boolean'.
|
||||
let a5 = onethree > f; // error, number and boolean
|
||||
~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '>' cannot be applied to types 'number' and 'boolean'.
|
||||
let a6 = true < onethree; // error, boolean and number
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
|
||||
let a7 = false < two; // error, boolean and number
|
||||
~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
|
||||
let a8 = 'foo' < onethree; // error, string and number
|
||||
~~~~~~~~~~~~~~~~
|
||||
!!! error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
|
||||
let a9 = onethree < 1; // ok
|
||||
let a10 = 1 < two; // ok
|
||||
let a11 = 2 < 1; // ok
|
||||
}
|
||||
|
||||
34
tests/baselines/reference/relationalOperatorComparable.js
Normal file
34
tests/baselines/reference/relationalOperatorComparable.js
Normal file
@@ -0,0 +1,34 @@
|
||||
//// [relationalOperatorComparable.ts]
|
||||
function f(onethree: 1 | 3, two: 2) {
|
||||
const t = true;
|
||||
const f = false;
|
||||
let a1 = onethree < two; // ok
|
||||
let a2 = onethree < true; // error, number and boolean
|
||||
let a3 = onethree <= false; // error, number and boolean
|
||||
let a4 = onethree >= t; // error, number and boolean
|
||||
let a5 = onethree > f; // error, number and boolean
|
||||
let a6 = true < onethree; // error, boolean and number
|
||||
let a7 = false < two; // error, boolean and number
|
||||
let a8 = 'foo' < onethree; // error, string and number
|
||||
let a9 = onethree < 1; // ok
|
||||
let a10 = 1 < two; // ok
|
||||
let a11 = 2 < 1; // ok
|
||||
}
|
||||
|
||||
|
||||
//// [relationalOperatorComparable.js]
|
||||
function f(onethree, two) {
|
||||
var t = true;
|
||||
var f = false;
|
||||
var a1 = onethree < two; // ok
|
||||
var a2 = onethree < true; // error, number and boolean
|
||||
var a3 = onethree <= false; // error, number and boolean
|
||||
var a4 = onethree >= t; // error, number and boolean
|
||||
var a5 = onethree > f; // error, number and boolean
|
||||
var a6 = true < onethree; // error, boolean and number
|
||||
var a7 = false < two; // error, boolean and number
|
||||
var a8 = 'foo' < onethree; // error, string and number
|
||||
var a9 = onethree < 1; // ok
|
||||
var a10 = 1 < two; // ok
|
||||
var a11 = 2 < 1; // ok
|
||||
}
|
||||
15
tests/cases/compiler/relationalOperatorComparable.ts
Normal file
15
tests/cases/compiler/relationalOperatorComparable.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
function f(onethree: 1 | 3, two: 2) {
|
||||
const t = true;
|
||||
const f = false;
|
||||
let a1 = onethree < two; // ok
|
||||
let a2 = onethree < true; // error, number and boolean
|
||||
let a3 = onethree <= false; // error, number and boolean
|
||||
let a4 = onethree >= t; // error, number and boolean
|
||||
let a5 = onethree > f; // error, number and boolean
|
||||
let a6 = true < onethree; // error, boolean and number
|
||||
let a7 = false < two; // error, boolean and number
|
||||
let a8 = 'foo' < onethree; // error, string and number
|
||||
let a9 = onethree < 1; // ok
|
||||
let a10 = 1 < two; // ok
|
||||
let a11 = 2 < 1; // ok
|
||||
}
|
||||
Reference in New Issue
Block a user