Skip to content

Commit d37caf1

Browse files
author
Andy
authored
Remove unnecessary getContainingClass calls (microsoft#26753)
1 parent cea49df commit d37caf1

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27344,12 +27344,10 @@ namespace ts {
2734427344
}
2734527345

2734627346
if (isPartOfTypeNode(node)) {
27347-
let typeFromTypeNode = getTypeFromTypeNode(<TypeNode>node);
27347+
const typeFromTypeNode = getTypeFromTypeNode(<TypeNode>node);
2734827348

2734927349
if (isExpressionWithTypeArgumentsInClassImplementsClause(node)) {
27350-
const containingClass = getContainingClass(node)!;
27351-
const classType = getTypeOfNode(containingClass) as InterfaceType;
27352-
typeFromTypeNode = getTypeWithThisArgument(typeFromTypeNode, classType.thisType);
27350+
return getTypeWithThisArgument(typeFromTypeNode, getTypeOfClassContainingHeritageClause(node).thisType);
2735327351
}
2735427352

2735527353
return typeFromTypeNode;
@@ -27362,8 +27360,7 @@ namespace ts {
2736227360
if (isExpressionWithTypeArgumentsInClassExtendsClause(node)) {
2736327361
// A SyntaxKind.ExpressionWithTypeArguments is considered a type node, except when it occurs in the
2736427362
// extends clause of a class. We handle that case here.
27365-
const classNode = getContainingClass(node)!;
27366-
const classType = getDeclaredTypeOfSymbol(getSymbolOfNode(classNode)) as InterfaceType;
27363+
const classType = getTypeOfClassContainingHeritageClause(node);
2736727364
const baseType = firstOrUndefined(getBaseTypes(classType));
2736827365
return baseType ? getTypeWithThisArgument(baseType, classType.thisType) : errorType;
2736927366
}
@@ -27405,6 +27402,10 @@ namespace ts {
2740527402
return errorType;
2740627403
}
2740727404

27405+
function getTypeOfClassContainingHeritageClause(node: ExpressionWithTypeArguments): InterfaceType {
27406+
return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(node.parent.parent));
27407+
}
27408+
2740827409
// Gets the type of object literal or array literal of destructuring assignment.
2740927410
// { a } from
2741027411
// for ( { a } of elems) {

src/compiler/utilities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3743,7 +3743,7 @@ namespace ts {
37433743
return false;
37443744
}
37453745

3746-
export function isExpressionWithTypeArgumentsInClassExtendsClause(node: Node): boolean {
3746+
export function isExpressionWithTypeArgumentsInClassExtendsClause(node: Node): node is ExpressionWithTypeArguments {
37473747
return tryGetClassExtendingExpressionWithTypeArguments(node) !== undefined;
37483748
}
37493749

0 commit comments

Comments
 (0)