@@ -24744,18 +24744,23 @@ namespace ts {
24744
24744
return false;
24745
24745
}
24746
24746
24747
- function reportOperatorError(awaitedTypesAreCompatible ?: (left: Type, right: Type) => boolean) {
24747
+ function reportOperatorError(isRelated ?: (left: Type, right: Type) => boolean) {
24748
24748
let wouldWorkWithAwait = false;
24749
24749
const errNode = errorNode || operatorToken;
24750
- const [leftStr, rightStr] = getTypeNamesForErrorDisplay(leftType, rightType);
24751
- if (awaitedTypesAreCompatible) {
24750
+ if (isRelated) {
24752
24751
const awaitedLeftType = getAwaitedType(leftType);
24753
24752
const awaitedRightType = getAwaitedType(rightType);
24754
24753
wouldWorkWithAwait = !(awaitedLeftType === leftType && awaitedRightType === rightType)
24755
24754
&& !!(awaitedLeftType && awaitedRightType)
24756
- && awaitedTypesAreCompatible (awaitedLeftType, awaitedRightType);
24755
+ && isRelated (awaitedLeftType, awaitedRightType);
24757
24756
}
24758
24757
24758
+ let effectiveLeft = leftType;
24759
+ let effectiveRight = rightType;
24760
+ if (!wouldWorkWithAwait && isRelated) {
24761
+ [effectiveLeft, effectiveRight] = getBaseTypesIfUnrelated(leftType, rightType, isRelated);
24762
+ }
24763
+ let [leftStr, rightStr] = getTypeNamesForErrorDisplay(effectiveLeft, effectiveRight);
24759
24764
if (!tryGiveBetterPrimaryError(errNode, wouldWorkWithAwait, leftStr, rightStr)) {
24760
24765
errorAndMaybeSuggestAwait(
24761
24766
errNode,
@@ -24792,6 +24797,18 @@ namespace ts {
24792
24797
}
24793
24798
}
24794
24799
24800
+ function getBaseTypesIfUnrelated(leftType: Type, rightType: Type, isRelated: (left: Type, right: Type) => boolean): [Type, Type] {
24801
+ let effectiveLeft = leftType;
24802
+ let effectiveRight = rightType;
24803
+ const leftBase = getBaseTypeOfLiteralType(leftType);
24804
+ const rightBase = getBaseTypeOfLiteralType(rightType);
24805
+ if (!isRelated(leftBase, rightBase)) {
24806
+ effectiveLeft = leftBase;
24807
+ effectiveRight = rightBase;
24808
+ }
24809
+ return [ effectiveLeft, effectiveRight ];
24810
+ }
24811
+
24795
24812
function isYieldExpressionInClass(node: YieldExpression): boolean {
24796
24813
let current: Node = node;
24797
24814
let parent = node.parent;
0 commit comments