in lib/merge.ts [340:364]
function getConstructedObjectType(constructor: base.Constructor): ts.ObjectTypeDeclaration|
undefined {
const constructedTypeSymbol: ts.Symbol = constructor &&
ts.isTypeReferenceNode(constructor.type) &&
fc.tc.getTypeAtLocation(constructor.type).getSymbol();
if (!constructedTypeSymbol) {
return;
}
// The constructed type can be a type literal, an interface, or a class.
return constructedTypeSymbol.declarations.find((member: ts.TypeElement) => {
if (ts.isTypeLiteralNode(member)) {
return true;
} else if (ts.isInterfaceDeclaration(member)) {
// Check if the interface was declared within a user-specified input file to
// prevent emitting classes for TS internal library types.
const fileName = member.getSourceFile().fileName;
return fileSet.has(fileName);
} else if (ts.isClassDeclaration(member)) {
return true;
}
return false;
}) as ts.ObjectTypeDeclaration |
undefined;
}