|
9 | 9 | createTextSpanFromBounds,
|
10 | 10 | createTextSpanFromNode,
|
11 | 11 | createTextSpanFromRange,
|
12 |
| - Debug, |
13 | 12 | Declaration,
|
14 | 13 | DefinitionInfo,
|
15 | 14 | DefinitionInfoAndBoundSpan,
|
@@ -581,16 +580,20 @@ function isExpandoDeclaration(node: Declaration): boolean {
|
581 | 580 |
|
582 | 581 | function getDefinitionFromSymbol(typeChecker: TypeChecker, symbol: Symbol, node: Node, failedAliasResolution?: boolean, excludeDeclaration?: Node): DefinitionInfo[] | undefined {
|
583 | 582 | const filteredDeclarations = filter(symbol.declarations, d => d !== excludeDeclaration);
|
| 583 | + const signatureDefinition = getConstructSignatureDefinition() || getCallSignatureDefinition(); |
| 584 | + if (signatureDefinition) { |
| 585 | + return signatureDefinition; |
| 586 | + } |
584 | 587 | const withoutExpandos = filter(filteredDeclarations, d => !isExpandoDeclaration(d));
|
585 | 588 | const results = some(withoutExpandos) ? withoutExpandos : filteredDeclarations;
|
586 |
| - return getConstructSignatureDefinition() || getCallSignatureDefinition() || map(results, declaration => createDefinitionInfo(declaration, typeChecker, symbol, node, /*unverified*/ false, failedAliasResolution)); |
| 589 | + return map(results, declaration => createDefinitionInfo(declaration, typeChecker, symbol, node, /*unverified*/ false, failedAliasResolution)); |
587 | 590 |
|
588 | 591 | function getConstructSignatureDefinition(): DefinitionInfo[] | undefined {
|
589 | 592 | // Applicable only if we are in a new expression, or we are on a constructor declaration
|
590 | 593 | // and in either case the symbol has a construct signature definition, i.e. class
|
591 | 594 | if (symbol.flags & SymbolFlags.Class && !(symbol.flags & (SymbolFlags.Function | SymbolFlags.Variable)) && (isNewExpressionTarget(node) || node.kind === SyntaxKind.ConstructorKeyword)) {
|
592 |
| - const cls = find(filteredDeclarations, isClassLike) || Debug.fail("Expected declaration to have at least one class-like declaration"); |
593 |
| - return getSignatureDefinition(cls.members, /*selectConstructors*/ true); |
| 595 | + const cls = find(filteredDeclarations, isClassLike); |
| 596 | + return cls && getSignatureDefinition(cls.members, /*selectConstructors*/ true); |
594 | 597 | }
|
595 | 598 | }
|
596 | 599 |
|
|
0 commit comments