Skip to content

Commit 2b28916

Browse files
author
Andy
authored
Simplify resolveBaseTypesOfClass (#17918)
1 parent 07e1d3b commit 2b28916

File tree

1 file changed

+6
-11
lines changed

1 file changed

+6
-11
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4929,7 +4929,7 @@ namespace ts {
49294929
}
49304930

49314931
function resolveBaseTypesOfClass(type: InterfaceType): void {
4932-
type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray;
4932+
type.resolvedBaseTypes = emptyArray;
49334933
const baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type));
49344934
if (!(baseConstructorType.flags & (TypeFlags.Object | TypeFlags.Intersection | TypeFlags.Any))) {
49354935
return;
@@ -4976,17 +4976,12 @@ namespace ts {
49764976
error(baseTypeNode.expression, Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType));
49774977
return;
49784978
}
4979-
if (type === baseType || hasBaseType(<BaseType>baseType, type)) {
4979+
if (type === baseType || hasBaseType(baseType, type)) {
49804980
error(valueDecl, Diagnostics.Type_0_recursively_references_itself_as_a_base_type,
49814981
typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType));
49824982
return;
49834983
}
4984-
if (type.resolvedBaseTypes === emptyArray) {
4985-
type.resolvedBaseTypes = [<ObjectType>baseType];
4986-
}
4987-
else {
4988-
type.resolvedBaseTypes.push(<ObjectType>baseType);
4989-
}
4984+
type.resolvedBaseTypes = [baseType];
49904985
}
49914986

49924987
function areAllOuterTypeParametersApplied(type: Type): boolean {
@@ -5003,7 +4998,7 @@ namespace ts {
50034998

50044999
// A valid base type is `any`, any non-generic object type or intersection of non-generic
50055000
// object types.
5006-
function isValidBaseType(type: Type): boolean {
5001+
function isValidBaseType(type: Type): type is BaseType {
50075002
return type.flags & (TypeFlags.Object | TypeFlags.NonPrimitive | TypeFlags.Any) && !isGenericMappedType(type) ||
50085003
type.flags & TypeFlags.Intersection && !forEach((<IntersectionType>type).types, t => !isValidBaseType(t));
50095004
}
@@ -5016,12 +5011,12 @@ namespace ts {
50165011
const baseType = getTypeFromTypeNode(node);
50175012
if (baseType !== unknownType) {
50185013
if (isValidBaseType(baseType)) {
5019-
if (type !== baseType && !hasBaseType(<BaseType>baseType, type)) {
5014+
if (type !== baseType && !hasBaseType(baseType, type)) {
50205015
if (type.resolvedBaseTypes === emptyArray) {
50215016
type.resolvedBaseTypes = [<ObjectType>baseType];
50225017
}
50235018
else {
5024-
type.resolvedBaseTypes.push(<ObjectType>baseType);
5019+
type.resolvedBaseTypes.push(baseType);
50255020
}
50265021
}
50275022
else {

0 commit comments

Comments
 (0)