@@ -17774,9 +17774,9 @@ namespace ts {
17774
17774
}
17775
17775
17776
17776
function getInstanceOfAliasOrReferenceWithMarker(input: Type, typeArguments: readonly Type[]) {
17777
- const s = input.aliasSymbol ? getTypeAliasInstantiation(input.aliasSymbol, typeArguments) : createTypeReference((<TypeReference>input).target, typeArguments);
17777
+ const s = input.aliasSymbol && !(getObjectFlags(input) & ObjectFlags.Reference) ? getTypeAliasInstantiation(input.aliasSymbol, typeArguments) : createTypeReference((<TypeReference>input).target, typeArguments);
17778
17778
if (s.aliasSymbol) s.aliasTypeArgumentsContainsMarker = true;
17779
- else (<TypeReference>s).objectFlags |= ObjectFlags.MarkerType;
17779
+ if (getObjectFlags(s) & ObjectFlags.Reference) (<TypeReference>s).objectFlags |= ObjectFlags.MarkerType;
17780
17780
return s;
17781
17781
}
17782
17782
@@ -17873,12 +17873,12 @@ namespace ts {
17873
17873
// is some specialization or subtype of Q
17874
17874
// This is difficult to detect generally, so we scan for prior comparisons of the same instantiated type, and match up matching
17875
17875
// type arguments into sets to create a canonicalization based on those matches
17876
- if (relation !== identityRelation && ((source.aliasSymbol && !source.aliasTypeArgumentsContainsMarker && source.aliasTypeArguments) || (getObjectFlags(source) & ObjectFlags.Reference && !!getTypeArguments(<TypeReference>source).length && !(getObjectFlags(source) & ObjectFlags.MarkerType))) &&
17877
- ((target.aliasSymbol && !target.aliasTypeArgumentsContainsMarker && target.aliasTypeArguments) || (getObjectFlags(target) & ObjectFlags.Reference && !!getTypeArguments(<TypeReference>target).length && !(getObjectFlags(target) & ObjectFlags.MarkerType)))) {
17876
+ if (relation !== identityRelation && ((source.aliasSymbol && !source.aliasTypeArgumentsContainsMarker && length( source.aliasTypeArguments) ) || (getObjectFlags(source) & ObjectFlags.Reference && !!getTypeArguments(<TypeReference>source).length && !(getObjectFlags(source) & ObjectFlags.MarkerType))) &&
17877
+ ((target.aliasSymbol && !target.aliasTypeArgumentsContainsMarker && length( target.aliasTypeArguments) ) || (getObjectFlags(target) & ObjectFlags.Reference && !!getTypeArguments(<TypeReference>target).length && !(getObjectFlags(target) & ObjectFlags.MarkerType)))) {
17878
17878
if (source.aliasSymbol || target.aliasSymbol || (<TypeReference>source).target !== (<TypeReference>target).target) { // ensure like symbols are just handled by standard variance analysis
17879
- const sourceTypeArguments = source.aliasTypeArguments || getTypeArguments(<TypeReference>source);
17879
+ const sourceTypeArguments = getObjectFlags( source) & ObjectFlags.Reference ? getTypeArguments(<TypeReference>source) : source.aliasTypeArguments! ;
17880
17880
const sourceHasMarker = some(sourceTypeArguments, a => a === markerOtherType);
17881
- const targetTypeArguments = target.aliasTypeArguments || getTypeArguments(<TypeReference>target);
17881
+ const targetTypeArguments = getObjectFlags( target) & ObjectFlags.Reference ? getTypeArguments(<TypeReference>target) : target.aliasTypeArguments! ;
17882
17882
const targetHasMarker = some(targetTypeArguments, a => a === markerOtherType);
17883
17883
// We're using `markerOtherType` as an existential, so we can't use it again if it's already in use,
17884
17884
// as we'd get spurious equivalencies - we'd need to use a second existential type, and once we're doing
0 commit comments