@@ -14706,11 +14706,17 @@ namespace ts {
1470614706 if (isFreshLiteralType(target)) {
1470714707 target = (<FreshableType>target).regularType;
1470814708 }
14709- if (source === target ||
14710- relation === comparableRelation && !(target.flags & TypeFlags.Never) && isSimpleTypeRelatedTo(target, source, relation) ||
14711- relation !== identityRelation && isSimpleTypeRelatedTo(source, target, relation)) {
14709+ if (source === target) {
1471214710 return true;
1471314711 }
14712+ if (relation !== identityRelation) {
14713+ if (relation === comparableRelation && !(target.flags & TypeFlags.Never) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation)) {
14714+ return true;
14715+ }
14716+ }
14717+ else {
14718+ if (source.flags !== target.flags || source.flags & (TypeFlags.AnyOrUnknown | TypeFlags.Primitive | TypeFlags.NonPrimitive | TypeFlags.TypeParameter)) return false;
14719+ }
1471414720 if (source.flags & TypeFlags.Object && target.flags & TypeFlags.Object) {
1471514721 const related = relation.get(getRelationKey(source, target, IntersectionState.None, relation));
1471614722 if (related !== undefined) {
@@ -18390,7 +18396,7 @@ namespace ts {
1839018396 }
1839118397
1839218398 function isTypeOrBaseIdenticalTo(s: Type, t: Type) {
18393- return isTypeIdenticalTo(s, t) || !!(s.flags & ( TypeFlags.StringLiteral | TypeFlags.NumberLiteral)) && isTypeIdenticalTo(getBaseTypeOfLiteralType(s), t );
18399+ return isTypeIdenticalTo(s, t) || !!(t.flags & TypeFlags.String && s.flags & TypeFlags.StringLiteral || t.flags & TypeFlags.Number && s.flags & TypeFlags.NumberLiteral );
1839418400 }
1839518401
1839618402 function isTypeCloselyMatchedBy(s: Type, t: Type) {
0 commit comments