mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-12-11 17:41:26 -06:00
Report on base primitives for certain operations.
This commit is contained in:
parent
8f30c09d99
commit
c555d4df89
@ -24744,18 +24744,23 @@ namespace ts {
|
||||
return false;
|
||||
}
|
||||
|
||||
function reportOperatorError(awaitedTypesAreCompatible?: (left: Type, right: Type) => boolean) {
|
||||
function reportOperatorError(isRelated?: (left: Type, right: Type) => boolean) {
|
||||
let wouldWorkWithAwait = false;
|
||||
const errNode = errorNode || operatorToken;
|
||||
const [leftStr, rightStr] = getTypeNamesForErrorDisplay(leftType, rightType);
|
||||
if (awaitedTypesAreCompatible) {
|
||||
if (isRelated) {
|
||||
const awaitedLeftType = getAwaitedType(leftType);
|
||||
const awaitedRightType = getAwaitedType(rightType);
|
||||
wouldWorkWithAwait = !(awaitedLeftType === leftType && awaitedRightType === rightType)
|
||||
&& !!(awaitedLeftType && awaitedRightType)
|
||||
&& awaitedTypesAreCompatible(awaitedLeftType, awaitedRightType);
|
||||
&& isRelated(awaitedLeftType, awaitedRightType);
|
||||
}
|
||||
|
||||
let effectiveLeft = leftType;
|
||||
let effectiveRight = rightType;
|
||||
if (!wouldWorkWithAwait && isRelated) {
|
||||
[effectiveLeft, effectiveRight] = getBaseTypesIfUnrelated(leftType, rightType, isRelated);
|
||||
}
|
||||
let [leftStr, rightStr] = getTypeNamesForErrorDisplay(effectiveLeft, effectiveRight);
|
||||
if (!tryGiveBetterPrimaryError(errNode, wouldWorkWithAwait, leftStr, rightStr)) {
|
||||
errorAndMaybeSuggestAwait(
|
||||
errNode,
|
||||
@ -24792,6 +24797,18 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
function getBaseTypesIfUnrelated(leftType: Type, rightType: Type, isRelated: (left: Type, right: Type) => boolean): [Type, Type] {
|
||||
let effectiveLeft = leftType;
|
||||
let effectiveRight = rightType;
|
||||
const leftBase = getBaseTypeOfLiteralType(leftType);
|
||||
const rightBase = getBaseTypeOfLiteralType(rightType);
|
||||
if (!isRelated(leftBase, rightBase)) {
|
||||
effectiveLeft = leftBase;
|
||||
effectiveRight = rightBase;
|
||||
}
|
||||
return [ effectiveLeft, effectiveRight ];
|
||||
}
|
||||
|
||||
function isYieldExpressionInClass(node: YieldExpression): boolean {
|
||||
let current: Node = node;
|
||||
let parent = node.parent;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user