Merge pull request #26143 from mattmccutchen/issue-26130

Have getAssignmentReducedType use the comparable relation instead of typeMaybeAssignableTo.
This commit is contained in:
Anders Hejlsberg
2018-08-09 07:43:46 -07:00
committed by GitHub
6 changed files with 120 additions and 15 deletions

View File

@@ -13843,18 +13843,6 @@ namespace ts {
return flow.id;
}
function typeMaybeAssignableTo(source: Type, target: Type) {
if (!(source.flags & TypeFlags.Union)) {
return isTypeAssignableTo(source, target);
}
for (const t of (<UnionType>source).types) {
if (isTypeAssignableTo(t, target)) {
return true;
}
}
return false;
}
// Remove those constituent types of declaredType to which no constituent type of assignedType is assignable.
// For example, when a variable of type number | string | boolean is assigned a value of type number | boolean,
// we remove type string.
@@ -13863,7 +13851,7 @@ namespace ts {
if (assignedType.flags & TypeFlags.Never) {
return assignedType;
}
const reducedType = filterType(declaredType, t => typeMaybeAssignableTo(assignedType, t));
const reducedType = filterType(declaredType, t => isTypeComparableTo(assignedType, t));
if (!(reducedType.flags & TypeFlags.Never)) {
return reducedType;
}