Skip to content

Commit c44f1a4

Browse files
committed
Faster exit from isTypeRelatedTo with identityRelation
1 parent ef8eb0c commit c44f1a4

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/compiler/checker.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)