wip-fix resolveEntityName with parenthesizedExpression

This commit is contained in:
Kanchalai Tanglertsampan 2017-03-15 19:16:37 -07:00
parent 4b3cd6a1db
commit 1c90ef5aad
3 changed files with 22 additions and 4 deletions

View file

@ -1511,6 +1511,9 @@ namespace ts {
return undefined;
}
}
else if (name.kind === SyntaxKind.ParenthesizedExpression) {
return getSymbolOfNode(name.expression);
}
else {
Debug.fail("Unknown entity name kind.");
}
@ -21069,7 +21072,6 @@ namespace ts {
if (isHeritageClauseElementIdentifier(<EntityName>entityName)) {
let meaning = SymbolFlags.None;
// In an interface or class, we're definitely interested in a type.
if (entityName.parent.kind === SyntaxKind.ExpressionWithTypeArguments) {
meaning = SymbolFlags.Type;
@ -21084,9 +21086,13 @@ namespace ts {
}
meaning |= SymbolFlags.Alias;
return resolveEntityName(<EntityName>entityName, meaning);
const entityNameSymbol = resolveEntityName(<EntityName>entityName, meaning);
if (entityNameSymbol) {
return entityNameSymbol;
}
}
else if (isPartOfExpression(entityName)) {
if (isPartOfExpression(entityName)) {
if (nodeIsMissing(entityName)) {
// Missing entity name.
return undefined;

View file

@ -1395,7 +1395,7 @@ namespace ts {
multiLine?: boolean;
}
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression;
export type EntityNameExpression = Identifier | PropertyAccessEntityNameExpression | ParenthesizedExpression;
export type EntityNameOrEntityNameExpression = EntityName | EntityNameExpression;
export interface PropertyAccessExpression extends MemberExpression, Declaration {

View file

@ -0,0 +1,12 @@
interface I {}
interface CTor {
new (hour: number, minute: number): I
}
var x: {
B : CTor
};
class B {}
function foo() {
return {B: B};
}
class C extends (foo()).B {}