β¬ οΈ Back to Table of Contents
π getBaseTypesOfClassMember¶
π Analysis Summary¶
| Metric | Count |
|---|---|
| π§ Functions | 1 |
| π¦ Imports | 2 |
π Table of Contents¶
π οΈ File Location:¶
π packages/eslint-plugin/src/util/getBaseTypesOfClassMember.ts
π¦ Imports¶
| Name | Source |
|---|---|
TSESTree |
@typescript-eslint/utils |
ParserServicesWithTypeInformation |
@typescript-eslint/utils |
Functions¶
getBaseTypesOfClassMember(β¦): Generator<{ baseType: ts.Type; baseMemberType: ts.Type; her⦶
Given a member of a class which extends another class or implements an interface, yields the corresponding member type for each of the base class/interfaces.
Raw JSDoc
Calls:
services.esTreeNodeToTSNodeMap.getservices.program.getTypeCheckerchecker.getSymbolAtLocationchecker.getTypeAtLocationchecker.getPropertyOfTypechecker.getTypeOfSymbolAtLocation
Code
export function* getBaseTypesOfClassMember(
services: ParserServicesWithTypeInformation,
memberNode: TSESTree.MethodDefinition | TSESTree.PropertyDefinition,
): Generator<{
baseType: ts.Type;
baseMemberType: ts.Type;
heritageToken: ts.SyntaxKind.ExtendsKeyword | ts.SyntaxKind.ImplementsKeyword;
}> {
const memberTsNode = services.esTreeNodeToTSNodeMap.get(memberNode);
if (memberTsNode.name == null) {
return;
}
const checker = services.program.getTypeChecker();
const memberSymbol = checker.getSymbolAtLocation(memberTsNode.name);
if (memberSymbol == null) {
return;
}
const classNode = memberTsNode.parent as ts.ClassLikeDeclaration;
for (const clauseNode of classNode.heritageClauses ?? []) {
for (const baseTypeNode of clauseNode.types) {
const baseType = checker.getTypeAtLocation(baseTypeNode);
const baseMemberSymbol = checker.getPropertyOfType(
baseType,
memberSymbol.name,
);
if (baseMemberSymbol == null) {
continue;
}
const baseMemberType = checker.getTypeOfSymbolAtLocation(
baseMemberSymbol,
memberTsNode,
);
const heritageToken = clauseNode.token;
yield { baseMemberType, baseType, heritageToken };
}
}
}
Generated by Syntax Scribe