MCPcopy Index your code
hub / github.com/nodejs/node / getSingleBaseForNonAugmentingSubtype

Function getSingleBaseForNonAugmentingSubtype

test/fixtures/snapshot/typescript.js:67422–67452  ·  view source on GitHub ↗
(type)

Source from the content-addressed store, hash-verified

67420 return isArrayType(type) || !(type.flags & 98304 /* TypeFlags.Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType);
67421 }
67422 function getSingleBaseForNonAugmentingSubtype(type) {
67423 if (!(ts.getObjectFlags(type) & 4 /* ObjectFlags.Reference */) || !(ts.getObjectFlags(type.target) & 3 /* ObjectFlags.ClassOrInterface */)) {
67424 return undefined;
67425 }
67426 if (ts.getObjectFlags(type) & 33554432 /* ObjectFlags.IdenticalBaseTypeCalculated */) {
67427 return ts.getObjectFlags(type) & 67108864 /* ObjectFlags.IdenticalBaseTypeExists */ ? type.cachedEquivalentBaseType : undefined;
67428 }
67429 type.objectFlags |= 33554432 /* ObjectFlags.IdenticalBaseTypeCalculated */;
67430 var target = type.target;
67431 if (ts.getObjectFlags(target) & 1 /* ObjectFlags.Class */) {
67432 var baseTypeNode = getBaseTypeNodeOfClass(target);
67433 // A base type expression may circularly reference the class itself (e.g. as an argument to function call), so we only
67434 // check for base types specified as simple qualified names.
67435 if (baseTypeNode && baseTypeNode.expression.kind !== 79 /* SyntaxKind.Identifier */ && baseTypeNode.expression.kind !== 206 /* SyntaxKind.PropertyAccessExpression */) {
67436 return undefined;
67437 }
67438 }
67439 var bases = getBaseTypes(target);
67440 if (bases.length !== 1) {
67441 return undefined;
67442 }
67443 if (getMembersOfSymbol(type.symbol).size) {
67444 return undefined; // If the interface has any members, they may subtype members in the base, so we should do a full structural comparison
67445 }
67446 var instantiatedBase = !ts.length(target.typeParameters) ? bases[0] : instantiateType(bases[0], createTypeMapper(target.typeParameters, getTypeArguments(type).slice(0, target.typeParameters.length)));
67447 if (ts.length(getTypeArguments(type)) > ts.length(target.typeParameters)) {
67448 instantiatedBase = getTypeWithThisArgument(instantiatedBase, ts.last(getTypeArguments(type)));
67449 }
67450 type.objectFlags |= 67108864 /* ObjectFlags.IdenticalBaseTypeExists */;
67451 return type.cachedEquivalentBaseType = instantiatedBase;
67452 }
67453 function isEmptyLiteralType(type) {
67454 return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType;
67455 }

Callers 2

getNormalizedTypeFunction · 0.85
reportErrorResultsFunction · 0.85

Calls 10

getBaseTypeNodeOfClassFunction · 0.85
getBaseTypesFunction · 0.85
getMembersOfSymbolFunction · 0.85
instantiateTypeFunction · 0.85
createTypeMapperFunction · 0.85
getTypeArgumentsFunction · 0.85
getTypeWithThisArgumentFunction · 0.85
sliceMethod · 0.65
lengthMethod · 0.45
lastMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…