@@ -6211,9 +6211,10 @@ namespace ts {
6211
6211
if (enumRelation[id] !== undefined) {
6212
6212
return enumRelation[id];
6213
6213
}
6214
- if (source.symbol.name !== target.symbol.name || !(source.symbol.flags & SymbolFlags.RegularEnum) || !(target.symbol.flags & SymbolFlags.RegularEnum)) {
6215
- enumRelation[id] = false;
6216
- return false;
6214
+ if (source.symbol.name !== target.symbol.name ||
6215
+ !(source.symbol.flags & SymbolFlags.RegularEnum) || !(target.symbol.flags & SymbolFlags.RegularEnum) ||
6216
+ !(source.flags & TypeFlags.Union) || !(target.flags & TypeFlags.Union)) {
6217
+ return (enumRelation[id] = false);
6217
6218
}
6218
6219
const targetEnumType = getTypeOfSymbol(target.symbol);
6219
6220
for (const property of getPropertiesOfType(getTypeOfSymbol(source.symbol))) {
@@ -6224,13 +6225,11 @@ namespace ts {
6224
6225
errorReporter(Diagnostics.Property_0_is_missing_in_type_1, property.name,
6225
6226
typeToString(target, /*enclosingDeclaration*/ undefined, TypeFormatFlags.UseFullyQualifiedType));
6226
6227
}
6227
- enumRelation[id] = false;
6228
- return false;
6228
+ return (enumRelation[id] = false);
6229
6229
}
6230
6230
}
6231
6231
}
6232
- enumRelation[id] = true;
6233
- return true;
6232
+ return (enumRelation[id] = true);
6234
6233
}
6235
6234
6236
6235
function isSimpleTypeRelatedTo(source: Type, target: Type, relation: Map<RelationComparisonResult>, errorReporter?: ErrorReporter) {
@@ -6245,9 +6244,7 @@ namespace ts {
6245
6244
if (source.flags & TypeFlags.Null && (!strictNullChecks || target.flags & TypeFlags.Null)) return true;
6246
6245
if (relation === assignableRelation || relation === comparableRelation) {
6247
6246
if (source.flags & TypeFlags.Any) return true;
6248
- if (source.flags & TypeFlags.Number && target.flags & TypeFlags.EnumLike) return true;
6249
- if (source.flags & TypeFlags.NumberLiteral && target.flags & TypeFlags.Enum) return true;
6250
- if (source.flags & TypeFlags.NumberLiteral && target.flags & TypeFlags.EnumLiteral && (<LiteralType>source).text === (<LiteralType>target).text) return true;
6247
+ if ((source.flags & TypeFlags.Number | source.flags & TypeFlags.NumberLiteral) && target.flags & TypeFlags.EnumLike) return true;
6251
6248
if (source.flags & TypeFlags.EnumLiteral &&
6252
6249
target.flags & TypeFlags.EnumLiteral &&
6253
6250
(<LiteralType>source).text === (<LiteralType>target).text &&
@@ -6434,14 +6431,6 @@ namespace ts {
6434
6431
if (result = typeRelatedToSomeType(source, <UnionType>target, reportErrors && !(source.flags & TypeFlags.Primitive) && !(target.flags & TypeFlags.Primitive))) {
6435
6432
return result;
6436
6433
}
6437
- if (source.flags & TypeFlags.Enum) {
6438
- // 1. look through the target union for a literal whose base type is related to the source
6439
- const lit = find((<UnionType>target).types, t => t.flags & TypeFlags.EnumLiteral && isEnumTypeRelatedTo(<EnumType>source, (<EnumLiteralType>t).baseType));
6440
- // 2. if found, the base type is only assignable to source if all its literals are in the target union.
6441
- if (lit && (result = isRelatedTo((lit as EnumLiteralType).baseType, target, /*reportErrors*/ false))) {
6442
- return result;
6443
- }
6444
- }
6445
6434
}
6446
6435
}
6447
6436
0 commit comments