@@ -22978,6 +22978,18 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
22978
22978
type;
22979
22979
}
22980
22980
22981
+ // This is the same as getBaseTypeOfLiteralType, but checks EnumLiteral last so we get
22982
+ // a specific literal's base type rather than the enum's base type.
22983
+ function getBaseTypeOfLiteralTypeForComparison(type: Type): Type {
22984
+ return type.flags & (TypeFlags.StringLiteral | TypeFlags.TemplateLiteral | TypeFlags.StringMapping) ? stringType :
22985
+ type.flags & TypeFlags.NumberLiteral ? numberType :
22986
+ type.flags & TypeFlags.BigIntLiteral ? bigintType :
22987
+ type.flags & TypeFlags.BooleanLiteral ? booleanType :
22988
+ type.flags & TypeFlags.EnumLiteral ? getBaseTypeOfEnumLiteralType(type as LiteralType) :
22989
+ type.flags & TypeFlags.Union ? getBaseTypeOfLiteralTypeUnion(type as UnionType) :
22990
+ type;
22991
+ }
22992
+
22981
22993
function getBaseTypeOfLiteralTypeUnion(type: UnionType) {
22982
22994
const key = `B${getTypeId(type)}`;
22983
22995
return getCachedType(key) ?? setCachedType(key, mapType(type, getBaseTypeOfLiteralType));
@@ -36423,8 +36435,8 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
36423
36435
case SyntaxKind.LessThanEqualsToken:
36424
36436
case SyntaxKind.GreaterThanEqualsToken:
36425
36437
if (checkForDisallowedESSymbolOperand(operator)) {
36426
- leftType = getBaseTypeOfLiteralType (checkNonNullType(leftType, left));
36427
- rightType = getBaseTypeOfLiteralType (checkNonNullType(rightType, right));
36438
+ leftType = getBaseTypeOfLiteralTypeForComparison (checkNonNullType(leftType, left));
36439
+ rightType = getBaseTypeOfLiteralTypeForComparison (checkNonNullType(rightType, right));
36428
36440
reportOperatorErrorUnless((left, right) => {
36429
36441
if (isTypeAny(left) || isTypeAny(right)) {
36430
36442
return true;
0 commit comments