diff --git a/src/services/goToDefinition.ts b/src/services/goToDefinition.ts index 799140097cd..499659bc331 100644 --- a/src/services/goToDefinition.ts +++ b/src/services/goToDefinition.ts @@ -68,11 +68,12 @@ namespace ts.GoToDefinition { // bar(({pr/*goto*/op1})=>{}); if (isPropertyName(node) && isBindingElement(parent) && isObjectBindingPattern(parent.parent) && (node === (parent.propertyName || parent.name))) { + const name = getNameFromPropertyName(node); const type = typeChecker.getTypeAtLocation(parent.parent); - const propSymbols = getPropertySymbolsFromType(type, node); - if (propSymbols) { - return flatMap(propSymbols, propSymbol => getDefinitionFromSymbol(typeChecker, propSymbol, node)); - } + return name === undefined ? emptyArray : flatMap(type.isUnion() ? type.types : [type], t => { + const prop = t.getProperty(name); + return prop && getDefinitionFromSymbol(typeChecker, prop, node); + }); } // If the current location we want to find its definition is in an object literal, try to get the contextual type for the diff --git a/src/services/services.ts b/src/services/services.ts index d02804ca1c7..31349157ecf 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2230,30 +2230,6 @@ namespace ts { return discriminatedPropertySymbols; } - /* @internal */ - export function getPropertySymbolsFromType(type: Type, propName: PropertyName) { - const name = unescapeLeadingUnderscores(getTextOfPropertyName(propName)); - if (name && type) { - const result: Symbol[] = []; - const symbol = type.getProperty(name); - if (type.flags & TypeFlags.Union) { - forEach((type).types, t => { - const symbol = t.getProperty(name); - if (symbol) { - result.push(symbol); - } - }); - return result; - } - - if (symbol) { - result.push(symbol); - return result; - } - } - return undefined; - } - function isArgumentOfElementAccessExpression(node: Node) { return node && node.parent &&