@@ -2867,7 +2867,7 @@ namespace ts {
28672867 }
28682868
28692869 function resolveBaseTypesOfClass(type: InterfaceType): void {
2870- type.resolvedBaseTypes = type.resolvedBaseTypes || [] ;
2870+ type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray ;
28712871 let baseContructorType = getBaseConstructorTypeOfClass(type);
28722872 if (!(baseContructorType.flags & TypeFlags.ObjectType)) {
28732873 return;
@@ -2903,19 +2903,29 @@ namespace ts {
29032903 typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType));
29042904 return;
29052905 }
2906- type.resolvedBaseTypes.push(baseType);
2906+ if (type.resolvedBaseTypes === emptyArray) {
2907+ type.resolvedBaseTypes = [baseType];
2908+ }
2909+ else {
2910+ type.resolvedBaseTypes.push(baseType);
2911+ }
29072912 }
29082913
29092914 function resolveBaseTypesOfInterface(type: InterfaceType): void {
2910- type.resolvedBaseTypes = type.resolvedBaseTypes || [] ;
2915+ type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray ;
29112916 for (let declaration of type.symbol.declarations) {
29122917 if (declaration.kind === SyntaxKind.InterfaceDeclaration && getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
29132918 for (let node of getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
29142919 let baseType = getTypeFromTypeNode(node);
29152920 if (baseType !== unknownType) {
29162921 if (getTargetType(baseType).flags & (TypeFlags.Class | TypeFlags.Interface)) {
29172922 if (type !== baseType && !hasBaseType(<InterfaceType>baseType, type)) {
2918- type.resolvedBaseTypes.push(baseType);
2923+ if (type.resolvedBaseTypes === emptyArray) {
2924+ type.resolvedBaseTypes = [baseType];
2925+ }
2926+ else {
2927+ type.resolvedBaseTypes.push(baseType);
2928+ }
29192929 }
29202930 else {
29212931 error(declaration, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType));
0 commit comments