Add circularity check to getReducedTypeOfUnionType
This commit is contained in:
parent
57b6f0a846
commit
99ba94e577
|
@ -88,6 +88,7 @@ module ts {
|
||||||
let undefinedType = createIntrinsicType(TypeFlags.Undefined | TypeFlags.ContainsUndefinedOrNull, "undefined");
|
let undefinedType = createIntrinsicType(TypeFlags.Undefined | TypeFlags.ContainsUndefinedOrNull, "undefined");
|
||||||
let nullType = createIntrinsicType(TypeFlags.Null | TypeFlags.ContainsUndefinedOrNull, "null");
|
let nullType = createIntrinsicType(TypeFlags.Null | TypeFlags.ContainsUndefinedOrNull, "null");
|
||||||
let unknownType = createIntrinsicType(TypeFlags.Any, "unknown");
|
let unknownType = createIntrinsicType(TypeFlags.Any, "unknown");
|
||||||
|
let resolvingType = createIntrinsicType(TypeFlags.Any, "__resolving__");
|
||||||
|
|
||||||
let emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
|
let emptyObjectType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
|
||||||
let anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
|
let anyFunctionType = createAnonymousType(undefined, emptySymbols, emptyArray, emptyArray, undefined, undefined);
|
||||||
|
@ -3629,9 +3630,17 @@ module ts {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getReducedTypeOfUnionType(type: UnionType): Type {
|
function getReducedTypeOfUnionType(type: UnionType): Type {
|
||||||
// If union type was created without subtype reduction, perform the deferred reduction now
|
// If union type was created without subtype reduction, perform the deferred reduction now. If a circularity
|
||||||
|
// is detected, simply use the type itself.
|
||||||
if (!type.reducedType) {
|
if (!type.reducedType) {
|
||||||
type.reducedType = getUnionType(type.types, /*noSubtypeReduction*/ false);
|
type.reducedType = resolvingType;
|
||||||
|
let reducedType = getUnionType(type.types, /*noSubtypeReduction*/ false);
|
||||||
|
if (type.reducedType === resolvingType) {
|
||||||
|
type.reducedType = reducedType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type.reducedType === resolvingType) {
|
||||||
|
type.reducedType = type;
|
||||||
}
|
}
|
||||||
return type.reducedType;
|
return type.reducedType;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue